Что такое класс и интерфейс?angular-10

1. Классы

Определение:

Класс - это шаблон для создания объектов, который инкапсулирует данные (свойства) и поведение (методы).

Особенности в TypeScript:

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)
  • Могут содержать статические свойства/методы

2. Интерфейсы

Определение:

Интерфейс - это абстрактный тип, который описывает структуру объекта, но не его реализацию.

Пример:

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}`);
  }
}

Характеристики интерфейсов:

  • Не компилируются в JavaScript (существуют только на этапе разработки)
  • Могут расширять другие интерфейсы (extends)
  • Поддерживают объединение типов (&)
  • Могут описывать сигнатуры методов

3. Основные различия

Характеристика Класс Интерфейс
Реализация Содержит реализацию Только описание структуры
Компиляция в JS Да Нет
Экземпляры Можно создавать через new Нельзя создать экземпляр
Модификаторы Поддерживают private/protected Всегда public
Наследование Через extends Через extends
Расширение - Через объединение (&, |)

4. Использование в Angular

Классы:

@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 запрос
  }
}

Резюмируем

  1. Классы:

    • Используются для создания объектов с реализацией
    • Могут содержать бизнес-логику
    • Основной строительный блок Angular-приложений
  2. Интерфейсы:

    • Описывают структуры данных
    • Обеспечивают проверку типов
    • Полезны для описания моделей данных и API контрактов
  3. Выбор между ними:

    • Используйте классы, когда нужна реализация и инкапсуляция
    • Используйте интерфейсы для описания форм данных и контрактов

P.S. В Angular интерфейсы часто используют для:

  • Описания моделей данных
  • Типизации входных/выходных параметров компонентов
  • Описания ответов API