[英]TypeScript generics - type inference
我正在尝试在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
使用type参数,则推断将按预期进行:
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"
});
游乐场链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.