首页 > 解决方案 > 是否可以将函数的返回类型用作变量的类型?

问题描述

假设我有这个功能:

let getData = () => {
    return {
        name: 'John',
        age: 2,
        isAsian: true
    }
}

我如何说(如果可能的话)变量的类型是 的返回类型getData而不影响它getData

例如,我正在寻找类似的东西:

var data: getData

当然这不起作用,因为类型是函数而不是函数的返回值。(编辑:实际上它只会给出错误Cannot find name 'getData':)

var data = getData()会工作; 的类型data将被推断为{name: string, age: number, isAsian: boolean},但这对我来说不是解决方案。

这里有一个讨论可能与我的问题有关:获取函数的返回类型

但是,这似乎不是我正在寻找的解决方案。首先,我还不能使用 Typescript 2.8(我正在使用 Angular,CLI 不允许我使用)。我认为替代方案,就像这个 SO 问题的主要解决方案对我没有用,因为我希望动态使用我的函数的返回类型。

标签: typescripttypescript2.0

解决方案


从 TypeScript 2.9(对不起)开始,您可以使用以下ReturnType类型:

let getData = () => {
    return {
        name: 'John',
        age: 2,
        isAsian: true
    }
}

let p: ReturnType<typeof getData>;
p.name; // string

在 2.9 之前您可以使用一些变通方法,但它们不是很好。一种方法是:

let fake = (false as any) && getData();
let p: typeof fake;

推荐阅读