Typescript 将泛型类型转换为具体类型时出错

Typescript 将泛型类型转换为具体类型时出错,typescript,generics,casting,compiler-errors,Typescript,Generics,Casting,Compiler Errors,我有以下类型脚本函数: add(element: T) { if (element instanceof class1) (<class1>element).owner = 100; } add(元素:T){ if(元素实例类别1)(元素).owner=100; } 问题是我遇到了以下错误: 错误TS2012:无法将“T”转换为“class1” 有什么想法吗?不能保证您的类型是兼容的,因此您必须按照以下要求进行双重转换 class class1 { constructo

我有以下类型脚本函数:

add(element: T) {
 if (element instanceof class1) (<class1>element).owner = 100;
}
add(元素:T){
if(元素实例类别1)(元素).owner=100;
}
问题是我遇到了以下错误:

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


有什么想法吗?

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

class class1 {
    constructor(public owner: number) {

    }
}

class Example<T> {
    add(element: T) {
        if (element instanceof class1) {
             (<class1><any>element).owner = 100;
         }
    }
}
class1类{
建造商(公共所有人:编号){
}
}
课例{
添加(元素:T){
if(类别1的元素实例){
(要素)。所有者=100;
}
}
}
当然,如果使用泛型类型约束,可以删除强制转换和检查

class class1 {
    constructor(public owner: number) {

    }
}

class Example<T extends class1> {
    add(element: T) {
        element.owner = 100;
    }
}
class1类{
建造商(公共所有人:编号){
}
}
课例{
添加(元素:T){
element.owner=100;
}
}
这是使用
class1
作为约束,但您可能会决定使用任何类都必须满足的接口才能有效-例如,它必须有一个名为
owner
number
类型的属性