TypeScript泛型-类型推断

时间:2018-06-24 05:32:04

标签: typescript generics

我正在尝试在TypeScript中重新创建可在C#中工作的东西。 在下面的代码中,我期望response1response2都是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"
});

1 个答案:

答案 0 :(得分:5)

Typescript使用结构兼容性来实现类型兼容性,因此诸如接口的继承列表之类的东西并不重要,重要的是类型的结构。在您的情况下,for i in new_names: if i == "paaches": NotTaken.append(i) else: print(i) 接口根本不使用IRequest类型的参数,因此它实际上在结构上等效于TResponse,因此{}扩展此接口几乎没有关系。如果MyRequest使用type参数,则推断将按预期进行:

IRequest

游乐场link