Ts的infer类型推导

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ts的infer类型推导相关的知识,希望对你有一定的参考价值。

Ts的infer类型推导

1.定义

在extends语句中,支持infer关键字,可以推断一个类型变量,高效的对类型进行模式匹配。但是,这个类型变量只能在true的分支中使用。

条件类型还提供了一种使用infer关键字在类型比较的true分支中进行目标类型推断的方法。

(可以将infer当作一种标记符,后续可以得到其标记的类型)

2.使用

exp1

type Flatten<Type> = Type extends Array<infer Item> ? Item : Type;

type Str = Flatten<string[]>;
// Str => string

type Num = Flatten<number[]>;
// Num => number

exp2

type GetReturnType<T> = T extends (...args: never[]) => infer Return ? Return : never;

type Num = GetReturnType<() => number>;
// Num => number

type Bools = GetReturnType<(a: boolean, b: boolean) => boolean[]>;
// Bools => boolean[]

exp3

// 如果泛型T是()=> infer R的子集,则返回infer R获取到的类型,否则返回boolean
type Func<T> = T extends () => infer R ? R : boolean;

let func1: Func<number>; // boolean;
let func2: Func<''>; // boolean
let func3: Func<() => Promise<number>>; // Promise<number>

exp4

type Obj<T> = T extends  a: infer VT, b: infer VT  ? VT : number;

let obj1: Obj<string>;  // number;
let obj2: Obj<true>;  // number;
let obj3: Obj<a: string, b: string>;   // string
let obj4: Obj<a: number, b: string>;   // string | number
// 当a、b为不同类型时,返回联合类型

参考文章

传送门1

传送门2

以上是关于Ts的infer类型推导的主要内容,如果未能解决你的问题,请参考以下文章

TS中的info用法

TS中的info用法

巧用 TypeScript--- infer

(水文)目标检测里的预测inference(推断)是啥,就是(prediction)(预测)

为啥 TS 中的泛型接口不能正确推断类型?

ConstraintLayout之Infer Constraints(推断约束)