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