Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 是否可以将函数的返回类型用作变量的类型?_Typescript_Typescript2.0 - Fatal编程技术网

Typescript 是否可以将函数的返回类型用作变量的类型?

Typescript 是否可以将函数的返回类型用作变量的类型?,typescript,typescript2.0,Typescript,Typescript2.0,假设我有这个功能: let getData = () => { return { name: 'John', age: 2, isAsian: true } } 我如何说(如果可能的话)变量的类型是getData,的返回类型,而不影响它到getData 例如,我正在寻找类似于: var data: getData 当然,这不起作用,因为类型是函数,而不是函数的返回值。(Edit:实际上它只会给出错误:找不到名称“getDa

假设我有这个功能:

let getData = () => {
    return {
        name: 'John',
        age: 2,
        isAsian: true
    }
}
我如何说(如果可能的话)变量的类型是
getData
的返回类型,而不影响它到
getData

例如,我正在寻找类似于:

var data: getData
当然,这不起作用,因为类型是函数,而不是函数的返回值。(Edit:实际上它只会给出错误:
找不到名称“getData”

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

这里有一个讨论可能与我的问题有关:

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

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

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

let p: ReturnType<typeof getData>;
p.name; // string
从TypeScript 2.9(抱歉)开始,您可以使用
ReturnType
类型:

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

let p: ReturnType<typeof getData>;
p.name; // string
。它仍然包含一个额外的函数和一个伪变量,但在代码中没有对
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; }
让getData=()=>{
返回{
姓名:'约翰',
年龄:2岁,
伊萨:是的
}
}
函数getReturnType(f:(…args:any[])=>R:{returnType:R}{
返回null!;
}
//伪变量,仅用于检索getData返回类型
让dataType=getReturnType(getData);
变量数据:typeof dataType.returnType;//变量数据:{name:string;age:number;isAsian:boolean;}
。它仍然包含一个额外的函数和一个伪变量,但在代码中没有对
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; }
让getData=()=>{
返回{
姓名:'约翰',
年龄:2岁,
伊萨:是的
}
}
函数getReturnType(f:(…args:any[])=>R:{returnType:R}{
返回null!;
}
//伪变量,仅用于检索getData返回类型
让dataType=getReturnType(getData);
变量数据:typeof dataType.returnType;//变量数据:{name:string;age:number;isAsian:boolean;}

使用typeof生成变量类型非常酷。谢谢你的帮助!使用typeof生成变量的类型非常酷。谢谢你的帮助!