У меня есть класс, который может быть расширен пользователем следующим образом:
class Foo {
extendFoo(key: string, value: string) {
this[key] = value; //<==typescript error: missing index signature
}
}
, как вы можете видеть, this
может быть расширен с помощью строк. проблема в том, что машинопись выдает жалобы, потому что у меня нет подписи индекса, поэтому я попытался добавить одну:
class Foo {
[key: string]: string;
extendFoo(key: string, value: string) { //<==typescript error: extendFoo is not a string
this[key] = value;
}
}
как я могу добавить подпись индекса, но при этом разрешить методы в моем классе?
конечно, я могу изменить подпись индекса на [key: string]: string | Function
, но это не правильно - любой неизвестный ключ должен быть строкой. Как я могу исключить только extendFoo
из подписи индекса?
class Foo {
[key: string]: string | Function;
extendFoo(key: string, value: string) {
this[key] = value;
}
}
const test = new Foo();
test['some unknown prop'].includes('test'); //<== typescript error: 'Property 'includes' does not exist on type 'Function'
Кстати, я знаю, что расширение this
- это плохой шаблон, но я конвертирую устаревший код в машинописный текст и у меня нет выбора .