\ TypeScript 中的ReturnType
是一种与ParameterType
非常相似的实用程序类型。它允许您获取函数的返回输出,并基于它构造一个类型。
\
ReturnType
实用程序类型
ReturnType
实用程序类型在特定函数的输出需要由另一个函数获取的情况下非常有用。在这种情况下,您可能会创建一个新的自定义类型,函数的输出会将其自身约束到该类型。
\ 让我们看一个愚蠢的例子来把它放到上下文中。下面,我们定义了一个新类型,它有两个属性a
和b
,它们都是数字。然后一个函数将这个对象上的所有数字转换为字符串并返回一个新类型。我们定义了一个自定义类型,称为Data
,它期望a
和b
是字符串。
\
function sendData(a: number, b: number) { return { a: `${a}`, b: `${b}` } } type Data = { a: string, b: string } function consoleData(data:Data) { console.log(JSON.stringify(data)); } let stringifyNumbers = sendData(1, 2); consoleData(stringifyNumbers);
\ 由于consoleData
期望数据的格式为Data
,如果a
或b
是数字,TypeScript 会抛出错误。我们的sendData
函数通过将a
和b
转换为字符串来解决这个问题。
\ 这个设置的问题是,如果我们添加或更改了sendData
或我们的输入数据,那么Data
也需要更新。这没什么大不了的,但它很容易产生错误。因此,我们可以改为使用ReturnType
来简化我们的类型声明。我们的Data
类型可以这样写:
\
function sendData(a: number, b: number) { return { a: `${a}`, b: `${b}` } } type Data = ReturnType<typeof sendData> // The same as writing: // type Data = { // a: string, // b: string // }
\ 由于sendData
以{ a: string, b: string }
类型返回数据,因此Data
成为该类型。这意味着我们不必维护sendData
输出的两个副本——相反,我们在函数内部拥有一个副本,以及一个符合该副本的类型,从而简化了我们的代码。
也在这里发布
原文: https://hackernoon.com/get-the-return-type-of-a-function-in-typescript-using-returntype?source=rss