将一个泛型类型强制转换为具体类型时出现错误

18

I have the following TypeScript function:

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

问题是我遇到了以下错误:

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

有什么想法吗?
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 作为约束条件,但是您可能决定使用一个任何类都必须满足的接口来进行验证 - 例如,它必须有一个名为 owner 的属性,类型为 number


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接