下面的代码有两个问题。
一切看起来不错,但是我遇到的第一个错误是将string
分配给string literal
时遇到了问题。可以通过如下方式将string
投射到string literal
来解决:
public bindings = {
prop: '<' as '<'
};
这很愚蠢,但是可以正常工作。
但是,第二个问题更加严重,没有解决方法。
我在第TS2416: Property 'controller' in type 'KpFileEditorComponent' is not assignable to the same property in base type 'Component<KpFileEditorComponentBindings>'. Property 'file' is missing in type 'typeof KpFileEditorComponentController' but required in type 'KpFileEditorComponentBindings'
行上收到此错误public controller = MyComponentController;
我认为这一定是TS中的错误,因为它在语法和语义上是正确的,还是我错了?
您有什么建议吗?
type ComponentBindings = '@' | '<' | '&' | '=';
interface Component<BINDINGS> {
bindings?: {
[prop in keyof BINDINGS]: ComponentBindings;
};
controller?: BINDINGS;
/* or:
controller?: {
[prop in keyof BINDINGS]: BINDINGS[prop];
}
*/
}
interface MyComponentBindings {
prop: string;
}
class MyComponentController implements MyComponentBindings {
public prop: string;
}
class MyComponent implements Component<MyComponentBindings> {
public bindings = {
prop: '<'
};
public controller = MyComponentController;
}