typescript - TypeScript 泛型 - 类型推断
问题描述
我正在尝试在 TypeScript 中重新创建在 C# 中工作的东西。在下面的代码中,我期望两者都是response1
和response2
,Promise<number>
但response1
似乎没有正确推断出泛型类型。
这可能吗?还是只是 TypeScript 无法做到的事情?
interface IRequest<TResponse> {}
interface MyRequest extends IRequest<number> {
id: string;
}
function execute<TResponse>(request: IRequest<TResponse>): Promise<TResponse>{
return Promise.reject("not implemented");
}
// const response1: Promise<{}>
const response1 = execute(<MyRequest>{
id: "123"
});
// const response2: Promise<number>
const response2 = execute(<IRequest<number>>{
id: "123"
});
解决方案
Typescript 使用结构兼容性来实现类型兼容性,因此接口的继承列表之类的东西并不重要,重要的是类型的结构。在您的情况下,IRequest
接口根本不使用TResponse
类型参数,因此它实际上在结构上等同于{}
,因此MyRequest
扩展此接口无关紧要。如果IRequest
要使用类型参数,推理将按预期工作:
interface IRequest<TResponse> {
_response?: TResponse
}
interface MyRequest extends IRequest<number> {
id: string;
}
function execute<TResponse>(request: IRequest<TResponse>): Promise<TResponse>{
return Promise.reject("not implemented");
}
// const response1: Promise<number>
const response1 = execute(<MyRequest>{
id: "123"
});
// const response2: Promise<number>
const response2 = execute(<IRequest<number>>{
id: "123"
});
游乐场链接
推荐阅读
- asp.net - Asp.Net Core 重定向到另一个页面
- css - 在表格数据中,以斜体而不是常规方式显示文本。无法理解为什么会这样
- javascript - 查找表中与特定数字最接近的数字
- laravel - 我想在 laravel 8 Elequent 查询中获取 date(groupBy) 明智的总出席、总休假和总缺勤,并在刀片模板中显示
- anylogic - Anylogic - 记录资源池活动
- java - 带有 KeyStore 和 ServerSockets 的 Java SSL/TLS
- python - 使用最新文件中缺少的项目创建一个 csv
- java - 读取文件内容抛出找不到符号
- javascript - 将 div 转换为 click、mouseover 和 mouseout 函数
- c# - 通过 .Net Framework C# 向 Gmail 发送电子邮件