将通用类型转换为具体类型时出错

时间:2013-09-11 07:30:47

标签: typescript generics casting compiler-errors

我有以下TypeScript函数:

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

问题是我收到以下错误:

  

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

有什么想法吗?

1 个答案:

答案 0 :(得分:34)

无法保证您的类型兼容,因此您必须按照以下方式进行双重播放...

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作为约束,但您可能决定使用任何类必须满足的接口才有效 - 例如,它必须具有类型为{{owner的属性。 1}}。