тип класса или любого из его подклассов вместо экземпляра класса

#typescript

#typescript

Вопрос:

У меня есть эти классы

 class Foo {}

class A extends Foo {}

class B extends Foo {}
 

теперь я хочу создать интерфейс, который имеет свойство type , что его тип class, а не экземпляр class

 interface Bar {
    type  : XXXX;     // I don't know to put here
    value : string;
}
 

итак, я могу создать экземпляр этого интерфейса следующим образом

 const x : Bar = {
    type  : Foo, // or and of its subclasses for example A or B
    value : 'test',
}
 

Мне нужен не экземпляр Foo , а класс Foo этого

 {
    type : new Foo(),
    value : "test"
}
 

не должно быть допустимым

Надеюсь, я правильно объяснил свою проблему

Комментарии:

1. Вам подходят дженерики?

2. Хорошо, не проблема, но как дженерики могут решить мою проблему?

Ответ №1:

Похоже, вам просто нужна сигнатура конструкции формы new () => Foo , что означает «конструктор с нулевыми аргументами, который создает экземпляр типа Foo «. Вот так:

 interface Bar {
     type: new () => Foo;
     value: string;
}

const x: Bar = {
     type: Foo,
     value: 'test',
};
const y: Bar = {
     type: A,
     value: ""
};
const z: Bar = {
     type: new Foo(), // error!
//   ~~~~ <-- // Type 'Foo' is not assignable to type 'new () => Foo'.
     value: ""
}
 

Игровая площадка ссылка на код

Комментарии:

1. typeof Foo также будет работать вместо new () => Foo .