罐头博客罐头博客
TS-infer关键字
TS - infer
2023-04-13 22:30:58

infer

在条件类型中申明泛型,使用 infer 关键字

有以下两个限制:

  1. 只能在条件类型的 extends 子句中使用
  2. infer 得到的类型只能在 true 语句中使用

申明一个条件类型 Element,获取数组中元素的类型:

type ElementType<T> = T extends unknown[] ? T[number] : T;
type A = ElementType<number[]>; // number

使用 infer 关键字重写:

type ElementType2<T> = T extends (infer U)[] ? U : T;
type B = ElementType2<number[]>; // number

replace

type Replace<
  S extends string,
  From extends string,
  To extends string
> = From extends ''
  ? S
  : S extends `${infer A}${From}${infer B}`
  ? `${A}${To}${B}`
  : S;

pop

type Pop<T extends any[]> = T extends [...infer I, infer _] ? I : [];