PassFront
  1. PassFront
  2. База знаний
  3. Типы и интерфейсы

Возможно ли сделать конструкцию с помощью интерфейса в TypeScript?

Типы и интерфейсы

Да. Интерфейс может описывать сигнатуру конструктора через new, а также функции и объекты с индексами.

Сигнатура конструктора

interface Point { x: number; y: number }

interface PointConstructor {
  new (x: number, y: number): Point;
}

function create(Ctor: PointConstructor) {
  return new Ctor(1, 2);
}

class Vector implements Point {
  constructor(public x: number, public y: number) {}
}

create(Vector); // ок

Конструкторную сигнатуру нельзя проверить через implements у самого класса — implements проверяет только экземпляр. Поэтому тип конструктора описывают отдельно и используют там, где класс передают как значение.

Другие конструкции в интерфейсе

  • Сигнатура вызова: interface Formatter { (value: number): string }.
  • Индексная сигнатура: interface Dict { [key: string]: number }.
  • Гибрид — функция со свойствами (как jQuery).

Коротко для собеседования

Да: интерфейс может описывать конструктор через new (...args): T, а также функции и индексные сигнатуры; implements при этом проверяет только экземпляр.

Подробнее: TypeScript Handbook — Construct Signatures

Другие вопросы раздела