【问题标题】:'XXX' provides no match for the signature 'new (): XXX''XXX' 与签名 'new (): XXX' 不匹配
【发布时间】:2017-02-23 19:30:50
【问题描述】:

我有以下课程,我在 for 循环中收到此错误:

[ts] “组件”类型的参数不能分配给“组件类型”类型的参数。 类型“组件”不匹配签名“新():组件”

这个类看起来像这样:

class Prefab {

    public components: Component[] = [];

    public static make(object: Prefab): GameObject {
        let go = new GameObject;
        for (let comp of object.components) {
            // The error is here:
            go.addComponent(comp);
        }
        return go;
    }

}

然后我的组件类就有了这个接口:

interface ComponentType<T extends Component> {
    new (): T;
}

这是addComponent的定义:

addComponent<T extends Component>(type: ComponentType<T>): T;

我可以在这里做什么?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    for循环中,comp变量引用Component类型。

    for (let comp of object.components) {
    

    而您的 addComponent 方法采用 ComponentType&lt;T&gt; 类型

    addComponent<T extends Component>(type: ComponentType<T>): T;
    

    ComponentComponentType&lt;T&gt; 没有导致错误的相同类型。

    【讨论】:

    • 我怎么能这样做:addComponent(MyComponent) 看起来像这样class MyComponent extends Component {}
    • 我想通了。只需要将public components: Component[] = []; 更改为此public components: ComponentType&lt;Component&gt;[] = [];
    • 是的,这两种类型都一样。
    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2014-05-25
    • 2017-04-28
    • 1970-01-01
    • 2012-11-20
    • 2023-03-10
    相关资源
    最近更新 更多