如何在打字稿中用具体类型包装泛型函数回调

问题描述 投票:0回答:1

我应该用什么来替换

???
?以上尝试均无效。

declare function generic1<T>(t: T): T;
declare function generic2<T>(t: T): { a: T };
declare function generic3<T>(t: T): { b: T[] };
// etc...


// function string_wrapper<F extends <T>(t: T) => any>(f: F): ReturnType<typeof f<string>> {
// function string_wrapper<F extends (t: string) => any>(f: F): ReturnType<F> {
// function string_wrapper<R, F extends (t: string) => R>(f: F): R {
function string_wrapper<F extends ???>(f: F): ??? {
    return f('hi'); // should be F<string>
}

const r1 = string_wrapper(generic1); // should be: string
const r2 = string_wrapper(generic2); // should be: { a: string }
const r3 = string_wrapper(generic3); // should be: { b: string[] }

游乐场链接

typescript
1个回答
0
投票

这是 TypeScript 所缺少的功能。目前,您无法使用条件类型推断来实例化泛型函数中的类型参数,就像您调用泛型函数或将泛型函数分配给特定函数类型时那样。 请参阅 microsoft/TypeScript#22617。相反,在推理之前,泛型类型参数首先用它们的constraints实例化。实际上,这意味着当您尝试这样做时,您会得到很多

unknown

© www.soinside.com 2019 - 2024. All rights reserved.