Skip to content

Latest commit

 

History

History
43 lines (32 loc) · 1.4 KB

Format.md

File metadata and controls

43 lines (32 loc) · 1.4 KB
标题 标签
Format(格式化打印的字符串) extends,infer(继承,推断)

格式化打印的字符串。

  • 创建一个 映射类型,包含 s 属性,属性值为字符串,d 属性,属性值为 number,代码如下:
type MapDict = {
  d: number;
  s: string;
};
  • 使用 infer 推断字符串是否由%组成,如果是则判断中间字符 M 是否是映射类型的属性,是,则返回对应的函数,函数参数为映射类型,返回值为递归剩余字符,否则递归剩余字符,否则返回 string。

代码如下:

type Format<T extends string> = T extends `${string}%${infer M}${infer R}`
  ? M extends keyof MapDict
    ? (x: MapDict[M]) => Format<R>
    : Format<R>
  : string;

使用方式:

type FormatRes1 = Format<'abc'>; //  string
type FormatRes2 = Format<'a%sbc'>; //  (s1: string) => string
type FormatRes3 = Format<'a%dbc'>; //  (d1: number) => string
type FormatRes4 = Format<'a%%dbc'>; //  string
type FormatRes5 = Format<'a%%%dbc'>; //  (d1: number) => string
type FormatRes6 = Format<'a%dbc%s'>; //  (d1: number) => (s1: string) => string

应用场景

如下所示,鼠标悬浮到对应的类型变量可以查看类型。