Конструктор — это специальный метод класса, который:
Базовый синтаксис:
class MyClass {
constructor() {
// Инициализация объекта
}
}
class User {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const user = new User('Alice', 30);
class User {
constructor(public name: string, public age: number) {
// Автоматически создает и присваивает свойства
}
}
Эквивалентно предыдущему примеру, но более компактно.
@Component({...})
export class MyComponent {
constructor(
private authService: AuthService,
private router: Router
) {}
}
Angular использует конструктор для внедрения зависимостей.
@Component({...})
export class MyComponent {
@ViewChild('myRef') myRef: ElementRef;
constructor() {
// Здесь myRef еще не доступен!
}
ngAfterViewInit() {
// myRef доступен только здесь
}
}
TypeScript не поддерживает несколько реализаций, но можно использовать:
class Point {
x: number;
y: number;
constructor(x: number, y?: number) {
this.x = x;
this.y = y ?? x; // Если y не задан, используем x
}
}
class Animal {
constructor(public name: string) {}
}
class Dog extends Animal {
constructor(name: string, public breed: string) {
super(name); // Обязательно вызывать первым
}
}
class AppConfig {
private static instance: AppConfig;
private constructor() {}
public static getInstance(): AppConfig {
if (!AppConfig.instance) {
AppConfig.instance = new AppConfig();
}
return AppConfig.instance;
}
}
constructor() {
this.data = await this.loadData(); // Ошибка!
}
Решение: использовать инициализацию в ngOnInit.
Понимание работы конструктора критически важно для: