У меня есть интерфейс и класс:
interface Widget {
widgetStuff(): void;
}
class Foo implements Widget {
widgetStuff(): void {
}
}
Я хочу отслеживать все Widget
в другом классе, и подпись индекса кажется самым простым способом:
class WidgetCatalog {
private readonly mapping: { [key: string]: Widget };
constructor() {
this.mapping = {
Foo // <= Error here
}
}
}
Я получаю эту ошибку: error TS2322: Type 'typeof Foo' is not assignable to type 'Widget'.
Property 'widgetStuff' is missing in type 'typeof Foo'.
Я не уверен, что мне здесь не хватает, так как это кажется довольно простой реализацией. Нужно ли мне по-другому указывать тип значения в подписи индекса?
1 ответ
@jcalz указал мне правильное направление. Эта версия работает:
interface Widget {
widgetStuff(): void;
}
class Foo implements Widget {
widgetStuff(): void {
}
}
class WidgetCatalog {
// Change to mapping of Widget constructors
private readonly mapping: { [key: string]: new(...args) => Widget };
constructor() {
this.mapping = {
Foo
}
}
}
Похожие вопросы
Новые вопросы
typescript
TypeScript - это типизированный надмножество JavaScript, которое компилируется в простой JavaScript. Он добавляет в JavaScript дополнительные типы, классы, интерфейсы и модули. Этот тег предназначен для вопросов, относящихся к TypeScript. Он не используется для ответов на общие вопросы по JavaScript.