Typescript学习: ReturnType

获取函数返回值类型
更新于: 2023-05-16 22:01:39

简单使用

获取函数返回值类型

function getInt(a: string) {
  return parseInt(a);
}

type A = ReturnType<typeof getInt>; // => number

cheatsheet

说明用法
取得函数返回值 string
type T0 = ReturnType<() => string>;
type T0 = string
取得函数返回值 void
type T1 = ReturnType<(s: string) => void>;
type T1 = void
取得函数返回值 unknown
type T2 = ReturnType<<T>() => T>;
type T2 = unknown
泛型<满足指定条件的类型>
type T3 = ReturnType<<T extends U, U extends number[]>() => T>;
type T3 = number[]
这段代码是使用 TypeScript 中的泛型类型和条件类型定义了一个类型 T3。让我们逐步解释它的含义:

T extends U, U extends number[]:这是一个条件类型的定义,表示类型 T 是类型 U 的子类型,并且类型 U 是 number 数组类型。

ReturnType<<T extends U, U extends number[]>() => T>:
这是一个函数类型的定义,它使用了嵌套的条件类型作为返回类型。ReturnType 是 TypeScript 标准库中的一个内置类型
它可以获取函数类型的返回值类型。这里,我们将一个匿名函数类型 (T extends U, U extends number[]) => T 作为 ReturnType 的参数。
该函数类型没有参数,但使用了泛型类型 T 和 U。

type T3 = ...:这是将上述函数类型作为返回类型传递给 ReturnType,并将结果赋值给类型别名 T3。
也就是说,T3 类型将是传递给函数类型的泛型类型 T。

总体来说,这段代码定义了一个类型别名 T3,该类型别名使用了嵌套的条件类型和泛型类型。
它描述了一个函数类型,该函数类型没有参数,但返回值类型是 T extends U, U extends number[] 中的泛型类型 T。
根据输入的泛型参数,T3 可以表示满足指定条件的类型。
结合 typeof 使用
declare function f1(): { a: number; b: string };
type T4 = ReturnType<typeof f1>;

type T4 = {
    a: number;
    b: string;
}
any
type T5 = ReturnType<any>;
type T5 = any
never
type T6 = ReturnType<never>;
type T6 = never
不合法的情况
type T7 = ReturnType<string>;
// Type 'string' does not satisfy the constraint '(...args: any) => any'.

type T8 = ReturnType<Function>;
Type 'Function' does not satisfy the constraint '(...args: any) => any'.
  Type 'Function' provides no match for the signature '(...args: any): any'.
type T8 = any

报错解释

type T7 = ReturnType<string>;  会报错。

在给定的代码中,ReturnType<string> 是一个 TypeScript 类型的定义。让我们来解释它的含义:

ReturnType 是 TypeScript 标准库中的一个内置类型。它接受一个函数类型作为参数,并返回该函数类型的返回值类型。然而,在这个例子中,我们将一个字符串类型 'string' 作为参数传递给了 ReturnType

当我们将一个非函数类型作为参数传递给 ReturnType 时,TypeScript 会发出一个编译时错误,因为它期望接收一个函数类型。

因此,代码 type T7 = ReturnType<string>; 会导致 TypeScript 编译错误,因为 string 不是一个函数类型,不能用于 ReturnType。正确使用 ReturnType 应该传递一个函数类型,以获取该函数类型的返回值类型。

参考