gpt4 book ai didi

typescript - 获取使用泛型的函数的返回类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:27 28 4
gpt4 key购买 nike

Disclaimer: overly simplified functions follow, I'm aware they're useless

function thinger<T>(thing: T): T {
return thing;
}

const thing = thinger({ a: "lol" });

thing.a;

上面的代码转译得很好。但我需要放置 thinger<T> 的结果变成一个对象。

interface ThingHolder {
thing: ReturnType<typeof thinger>;
}

const myThingHolder: ThingHolder = {
thing: thinger({ a: "lol" }),
};

但是我丢失了我的类型信息所以myThingHolder.thing.a不工作

Property 'a' does not exist on type '{}'

所以我尝试了以下

interface ThingHolder<T> {
thing: ReturnType<typeof thinger<T>>;
}

const myThingHolder: ThingHolder<{ a: string }> = {
thing: thinger({ a: "lol" }),
};

但是typeof thinger<T>不是有效的 typescript 。

如何获取具有基于泛型的不同返回类型的函数的返回类型?

最佳答案

我不妨把它放在一个答案中,尽管它看起来不能满足您的需求。 TypeScript 目前既没有 generic values , higher kinded types , 也不 typeof on arbitrary expressions . TypeScript 中的泛型有点“肤浅”。据我所知,不幸的是,没有办法描述将类型参数插入泛型函数并检查结果的类型函数:

// doesn't work, don't try it
type GenericReturnType<F, T> = F extends (x: T) => (infer U) ? U : never

function thinger<T>(thing: T): T {
return thing;
}

// just {}, 🙁
type ReturnThinger<T> = GenericReturnType<typeof thinger, T>;

所以我能为您做的就是建议解决方法。最明显的解决方法是使用类型别名来描述 thinger() 返回的内容,然后在多个地方使用它。这是你想要的“倒退”版本;不是从函数中提取返回类型,而是从返回类型构建函数:

type ThingerReturn<T> = T; // or whatever complicated type you have

// use it here
declare function thinger<T>(thing: T): ThingerReturn<T>;

// and here
interface ThingHolder<T> {
thing: ThingerReturn<T>;
}

// and then this works 🙂
const myThingHolder: ThingHolder<{ a: string }> = {
thing: thinger({ a: "lol" }),
};

这有帮助吗?我知道这不是您想要的,但希望它至少是您前进的可能途径。祝你好运!

关于typescript - 获取使用泛型的函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005595/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com