Typescript 类型脚本泛型-类型推断
我正试图在TypeScript中重新创建一些在C#中工作的东西。 在下面的代码中,我希望Typescript 类型脚本泛型-类型推断,typescript,generics,Typescript,Generics,我正试图在TypeScript中重新创建一些在C#中工作的东西。 在下面的代码中,我希望response1和response2都是Promise,但response1似乎无法正确推断泛型类型 这可能吗?或者这只是TypeScript不能做的事情 interface IRequest<TResponse> {} interface MyRequest extends IRequest<number> { id: string; } function execut
response1
和response2
都是Promise
,但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"
});
接口IRequest{}
接口MyRequest扩展了IRequest{
id:字符串;
}
函数执行(请求:IRequest):承诺{
退货承诺。拒绝(“未执行”);
}
//康斯特回答1:承诺
const response1=执行({
身份证号码:“123”
});
//const response2:承诺
const response2=执行({
身份证号码:“123”
});
Typescript使用结构兼容性来实现类型兼容性,因此像接口的继承列表这样的事情并不重要,重要的是类型的结构。在您的例子中,IRequest
接口根本不使用treresponse
类型参数,因此它实际上在结构上等同于{}
,因此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"
});
接口IRequest{
_响应?:响应
}
接口MyRequest扩展了IRequest{
id:字符串;
}
函数执行(请求:IRequest):承诺{
退货承诺。拒绝(“未执行”);
}
//康斯特回答1:承诺
const response1=执行({
身份证号码:“123”
});
//const response2:承诺
const response2=执行({
身份证号码:“123”
});
PlaywayTResponseas的类型限制是什么?它在中说:“通常,您不应该有未使用的类型参数。该类型将具有意外的兼容性(如图所示),并且在函数调用中也无法进行正确的泛型类型推断。”