Возможно ли сделать конструкцию с помощью интерфейса в 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