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

Posted

技术标签:

【中文标题】将泛型类型转换为具体类型时出错【英文标题】:Error casting a generic type to a concrete one 【发布时间】:2013-09-11 07:30:47 【问题描述】:

我有以下 TypeScript 函数:

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

问题是我收到以下错误:

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于将泛型类型转换为具体类型时出错的主要内容,如果未能解决你的问题,请参考以下文章

当两个类型参数在C#中实现公共接口时,如何将泛型强制转换为它实现的接口

将泛型 TArray 转换为 varArray

将泛型 T 的类型解析为 C# 中的特定接口

Java 将泛型类型与 Void 进行比较

泛型中的类型擦除

为啥 C# 允许将泛型数组与所有类型的模式进行匹配?