Это проще объяснить, посмотрев на реальный код:
interface FooInterface {
bar: (flags: { [key: string]: string }) => void;
}
export class Foo implements FooInterface {
bar(flags: { myFlag: string }) {}
}
Я хочу, чтобы любой, кто реализует FooInterface.bar
, передавал объект. Меня не волнуют ключи.
Однако, когда я реализовал его в классе Foo
и назвал ключ как myFlag
, я получил ошибку, что этот ключ не существует в интерфейсе. См. Полную ошибку ниже.
Как сказать Typescript игнорировать ключи в реализованных классах?
Ошибка, которую я получил:
src/extensions/test/test.provider.ts:24:3 - error TS2416: Property 'bar' in type 'Foo' is not assignable to the same property in base type 'FooInterface'.
Type '(flags: { myFlag: string; }) => void' is not assignable to type '(flags: { [key: string]: string; }) => void'.
Types of parameters 'flags' and 'flags' are incompatible.
Property 'myFlag' is missing in type '{ [key: string]: string; }' but required in type '{ myFlag: string; }'.
24 bar(flags: { myFlag: string }) {}
~~~