Skip to content

速查表总览

按主题分的七页速查。用 ⌘K / Ctrl+K 可以直接搜索全部内容。

分页导航

页面内容
关键字与语法keyof / typeof / infer / in / as / satisfies / 修饰符 / 模板字面量
内置工具类型按用途分组,含实现源码与一句话说明
六大套路类型编程的六个可复用模式
边界行为any / unknown / never / 分发 / 元组 vs 数组
异步与迭代器两个三参数族的完整签名与取元素类型
变型与调试协变逆变、ExpandEqual、tsc 开关

最常用的一张表

如果你只记一页,记这个:

JS → 类型层 对照心智模型
ts
const a = 1type A = 1
if (a === b) {} else {}A extends B ? X : Y
for (const x of xs) {}递归调用自身
(x) => x + 1type F<T> = ...
const { a } = objT extends { a: infer A } ? A : never
xs.map(x => f(x)){ [K in keyof T]: F<T[K]> }
console.log(x)type Expand<T> = { [K in keyof T]: T[K] }
let x = 1; x = 2不存在只能构造新类型
语法小抄高频
想干什么写法
取键keyof T
查键的类型T[K](K 是联合时得值的联合)
限制参数范围K extends keyof T
遍历键造对象{ [P in K]: ... }
遍历时换键名{ [P in K as NewKey]: ... }as 键重映射)
过滤键把不想要的映射成 never
做判断A extends B ? X : Y
阻止分发[T] extends [U]
判断 never[T] extends [never]
判断 any0 extends 1 & T
拆出一部分T extends [infer F, ...infer R] ? F : never
元组长度T['length']
元组转联合T[number]
看不清的类型type Prettify<T> = { [K in keyof T]: T[K] } & {}
extends 的三种含义第一大坑
ts
// ① 约束:K 只能是 T 的键
type MyPick<T, K extends keyof T> = { [P in K]: T[P] }

// ② 判断:A 能不能赋值给 B
type IsStr<T> = T extends string ? true : false

// ③ 继承
interface A extends B { x: number }
边界行为四条必记
ts
type F<T> = T extends string ? 1 : 2

F<any>      // 1 | 2   两个分支都要
F<never>    // never   分发到空集
'a' | never // 'a'     never 被联合吸收
keyof any   // string | number | symbol

下一步

基于 VitePress 与 Twoslash 构建