首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Typescript通用interface<T>扩展相同的名称

Typescript通用interface<T>扩展相同的名称
EN

Stack Overflow用户
提问于 2018-02-15 23:24:53
回答 2查看 3.3K关注 0票数 6

这显然适用于C#,但不适用于typescript,有没有办法绕过它,或者我只需要使用不同的名称?

代码语言:javascript
运行
复制
export interface IThing<T> extends IThing {
 Value: T;
}

export interface IThing {
Name?: string;
ValueStr?: string;
Type?: string;
}

我得到‘IThing的所有声明都必须有相同的类型参数’

如果我太愚蠢了,很抱歉!

EN

回答 2

Stack Overflow用户

发布于 2018-02-15 23:28:25

您需要使用不同的名称,只有名称在标识接口时才重要,而不是泛型类型参数的数量。

泛型在编译时在Typescript中被擦除,因此无法区分泛型类的不同实例化。尽管接口只是一个编译时构造,可能已经通过名称和泛型参数的数量进行了区分,但我的猜测是,由于类是以这种方式工作的,所以决定让接口以同样的方式工作。

一种解决方法是对接口使用默认类型参数:

代码语言:javascript
运行
复制
export interface IThing<T = any> {
    Name?: string;
    ValueStr?: string;
    Type?: string; 
    Value: T;
}

var d: IThing;
var foo: IThing<number> 
票数 8
EN

Stack Overflow用户

发布于 2018-02-15 23:27:07

编辑2

我误解了问题,所以这不是一个正确的答案。我将在这里说明如何使用声明合并。

第一个声明有一个类型参数T,而第二个没有,只要确保它们都有类型参数。

代码语言:javascript
运行
复制
export interface IThing<T> {
    Name?: string;
    ValueStr?: string;
    Type?: string;
}

编辑

代码语言:javascript
运行
复制
interface IThing<T> extends IThing

这是行不通的,正如我在上面所说的,只需确保两个接口声明具有相同的名称和相同的类型参数

代码语言:javascript
运行
复制
interface IThing<T>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48810670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档