never 类型通常表示不会发生的类型,但是下面官方提供的泛型例子有点看不明白 never 的用途了。
type GetReturnType<Type> = Type extends (...args: never[]) => infer Return
? Return
: never;
这是一个泛型工具类,可以提取函数的返回值类型,但是函数的参数定义成 never 类型数组有些不懂了,看提供的例子,这个定义既能满足无参数函数,也能满足有参数函数。
type Num = GetReturnType<() => number>;
//type Num = number
type Str = GetReturnType<(x: string) => string>;
//type Str = string
type Bools = GetReturnType<(a: boolean, b: boolean) => boolean[]>;
//type Bools = boolean[]