导航菜单

文章

分享一些技术文章和开发经验,记录学习和成长的过程。

TypeScript 类型体操实用技巧

前言

TypeScript 的类型系统非常强大,但很多人只用了最基础的部分。这篇文章分享几个实用技巧。

1. 从数组中提取联合类型

const COLORS = ["red", "green", "blue"] as const;
type Color = (typeof COLORS)[number]; // "red" | "green" | "blue"

as const 是关键——它让 TypeScript 把数组推断为字面量元组而非 string[]

2. 条件类型 + infer

type PromiseValue<T> = T extends Promise<infer V> ? V : never;
type Result = PromiseValue<Promise<string>>; // string

infer 关键字可以在条件类型中"提取"类型参数,非常灵活。

3. 模板字面量类型

type EventName<T extends string> = `on${Capitalize<T>}`;
type ClickEvent = EventName<"click">; // "onClick"

配合内置的 CapitalizeUncapitalizeUppercaseLowercase 可以做很多字符串变换。

小结

类型体操不是为了炫技,而是在合适的场景下让类型系统帮你减少运行时错误。记住:好的类型设计应该让错误的代码编译不过,而不是让正确的代码写法别扭