TS2416:类型“ MyComp”中的属性“ ctrl”无法分配给基本类型“ Comp <MyCompBindings>”中的相同属性

时间:2019-07-24 13:33:51

标签: typescript

下面的代码有两个问题。 一切看起来不错,但是我遇到的第一个错误是将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中的错误,因为它在语法和语义上是正确的,还是我错了?

您有什么建议吗?

Playground here

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;
}

0 个答案:

没有答案