假设我具有此功能:
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问题的主要解决方案一样,替代方法对我没有用,因为我希望动态使用函数的返回类型。
答案 0 :(得分:3)
从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;
答案 1 :(得分:3)
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; }