TypeScript 4.x 的模板字面量类型(Template Literal Types)能做什么?

模板字面量类型可在类型层面拼接字符串,配合 infer 能实现强大的字符串类型推导:

type Greet<T extends string> = `Hello, ${T}!`
type G = Greet<'World'>   // 'Hello, World!'

// 把 'user.name' 风格的键反转成 getter 名
type Getter<T extends string> =
  T extends `${infer _}` ? `get${Capitalize<T>}` : never
type M = Getter<'name'>    // 'getName'

// 实战:约束路由路径、事件名,或 DeepReadonly 递归工具类型
type DeepReadonly<T> = {
  readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K]
}

这类「类型体操」适合写通用库(如类型安全的路由、i18n key 校验),业务代码里不宜过度使用以免可读性下降。

同分类其他题目