#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
.