gpt4 book ai didi

typescript - 在 Typescript 中导出函数的返回类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:35:33 24 4
gpt4 key购买 nike

我有一个构建对象的函数,如下所示:

function toast() {
return {
a: "a",
b: "b"
}
}

我可以定义函数的类型为

type ToastFunctionType = typeof toast

这种类型会是

() => { a: string; b: string; }

但是,我只想要返回值的类型。是否可以提取toast返回值的类型?在我的用例中,对象的实际值使用非常冗长的泛型类型参数。类型推断使它们恰到好处,我想避免维护一个非常冗长的接口(interface)(我需要导出)。

在 toast 的情况下我想要的只是

{ a: string; b: string; }

最佳答案

是的,这是可能的。诀窍是在某处使用您需要的类型(toast() 的返回类型)声明的某个值,而不实际调用 toast()。为此,您可以引入另一个返回适当类型值(实际值为 null)的函数,然后创建一个变量并将该函数返回的值赋给它,然后获取该变量的 typeof

我找不到不添加未使用的变量的方法,但由于变量是由函数立即返回的 null 初始化的,我认为运行时开销可以忽略不计。这是代码:

function toast() {
return {
a: "a",
b: "b"
}
}

function getReturnType<R> (f: (...args: any[]) => R): {returnType: R} {
return null!;
}

// dummy variable, used for retrieving toast return type only
let toastType = getReturnType(toast);

export type ToastReturnType = typeof toastType.returnType;

2018 年 2 月更新

在即将发布的 2.8 版本中,有 some new language features这使得在不涉及虚拟变量和函数的情况下成为可能。

此示例使用 typescript@next 编译:

export function z() {
return {a: 1, b: '2'}
}

export function v() {
}

type ReturnType<T extends (...args: any[]) => any> =
T extends (...args: any[]) => infer R ? R : never;

export type RZ = ReturnType<typeof z>; // { a: number; b: string; }
export type RV = ReturnType<typeof v>; // void

typescript >= 2.8

从 2.8 版开始,TypeScript 有一个 built-in generic ReturnType你可以使用。

关于typescript - 在 Typescript 中导出函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251531/

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