18

我有以下打字稿功能:

add(element: T) {
 if (element instanceof class1) (<class1>element).owner = 100;
}

问题是我收到以下错误:

错误 TS2012:无法将“T”转换为“class1”

有任何想法吗?

4

1 回答 1

35

不能保证您的类型是兼容的,因此您必须按照以下内容进行双重转换...

class class1 {
    constructor(public owner: number) {

    }
}

class Example<T> {
    add(element: T) {
        if (element instanceof class1) {
             (<class1><any>element).owner = 100;
         }
    }
}

当然,如果您使用泛型类型约束,您可以删除强制转换和检查...

class class1 {
    constructor(public owner: number) {

    }
}

class Example<T extends class1> {
    add(element: T) {
        element.owner = 100;
    }
}

class1用作约束,但您可能决定使用任何类必须满足才能有效的接口 - 例如,它必须具有名为ownertype的属性number

于 2013-09-11T08:20:06.783 回答