Класс - это шаблон для создания объектов, который инкапсулирует данные (свойства) и поведение (методы).
class User {
// Поля класса (могут быть public/protected/private)
public name: string;
private age: number;
// Конструктор
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
// Метод
greet(): string {
return `Hello, my name is ${this.name}`;
}
}
// Использование
const user = new User('Alice', 30);
console.log(user.greet());
Ключевые моменты:
extends
)implements
)public
, private
, protected
)Интерфейс - это абстрактный тип, который описывает структуру объекта, но не его реализацию.
interface Person {
name: string;
age: number;
greet(): void;
}
class Employee implements Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hi, I'm ${this.name}`);
}
}
Характеристики интерфейсов:
extends
)&
)Характеристика | Класс | Интерфейс |
---|---|---|
Реализация | Содержит реализацию | Только описание структуры |
Компиляция в JS | Да | Нет |
Экземпляры | Можно создавать через new |
Нельзя создать экземпляр |
Модификаторы | Поддерживают private/protected | Всегда public |
Наследование | Через extends |
Через extends |
Расширение | - | Через объединение (& , | ) |
@Component({
selector: 'app-user',
template: `...`
})
export class UserComponent implements OnInit {
@Input() user: User;
ngOnInit() {
// Инициализация
}
}
export interface Product {
id: number;
name: string;
price: number;
}
@Injectable()
export class ProductService {
getProducts(): Observable<Product[]> {
// HTTP запрос
}
}
Классы:
Интерфейсы:
Выбор между ними:
P.S. В Angular интерфейсы часто используют для: