是否可以使用 return 类型的函数作为变量的类型?
Is it possible to use the return type of a function as the type of a variable?
假设我有这个功能:
let getData = () => {
return {
name: 'John',
age: 2,
isAsian: true
}
}
我怎么说(如果可能的话)变量的类型是 getData
的 return 类型, 没有 影响它到 getData
?
例如,我正在寻找类似的东西:
var data: getData
当然这是行不通的,因为类型是函数而不是函数的 return 值。 (编辑:实际上它只会给出错误:Cannot find name 'getData'
)
var data = getData()
可以; data
的类型将被推断为 {name: string, age: number, isAsian: boolean}
,但这不是我的解决方案。
这里有一个讨论可能与我的问题有关:
但是,这似乎不是我正在寻找的解决方案。首先,我还不能使用 Typescript 2.8(我正在使用 angular,但 CLI 不允许)。我认为替代方案,就像这个 SO 问题的主要解决方案一样,对我没有用,因为我希望动态使用我的函数的 return 类型。
从 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;
。它仍然包含一个额外的函数和一个虚拟变量,但它没有在代码中调用 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; }
假设我有这个功能:
let getData = () => {
return {
name: 'John',
age: 2,
isAsian: true
}
}
我怎么说(如果可能的话)变量的类型是 getData
的 return 类型, 没有 影响它到 getData
?
例如,我正在寻找类似的东西:
var data: getData
当然这是行不通的,因为类型是函数而不是函数的 return 值。 (编辑:实际上它只会给出错误:Cannot find name 'getData'
)
var data = getData()
可以; data
的类型将被推断为 {name: string, age: number, isAsian: boolean}
,但这不是我的解决方案。
这里有一个讨论可能与我的问题有关:
但是,这似乎不是我正在寻找的解决方案。首先,我还不能使用 Typescript 2.8(我正在使用 angular,但 CLI 不允许)。我认为替代方案,就像这个 SO 问题的主要解决方案一样,对我没有用,因为我希望动态使用我的函数的 return 类型。
从 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;
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; }