【问题标题】:Is it possible to use the return type of a function as the type of a variable?是否可以将函数的返回类型用作变量的类型?
【发布时间】:2018-12-08 01:18:04
【问题描述】:

假设我有这个功能:

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},但这不是我的解决方案。

这里有一个讨论可能与我的问题有关:Obtaining the return type of a function

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

【问题讨论】:

    标签: typescript typescript2.0


    【解决方案1】:

    从 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;
    

    【讨论】:

    • 可以使用 typeof 来生成变量的类型,这很酷。感谢您的帮助!
    【解决方案2】:

    Here is another solution for pre-2.8 compiler。它仍然涉及一个额外的函数和一个虚拟变量,但它没有在代码中调用getData()

    let getData = () => {
        return {
            name: 'John',
            age: 2,
            isAsian: true
        }
    }
    
    
    function getReturnType<R>(f: (...args: any[]) => R): { returnType: R } {
        return null!;
    }
    
    // dummy variable, used for retrieving getData return type only
    let dataType = getReturnType(getData);
    
    var data: typeof dataType.returnType; // var data: { name: string; age: number; isAsian: boolean; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 2022-06-11
      • 2021-03-04
      • 2011-12-18
      相关资源
      最近更新 更多