手写 Partial / Required / Pick / Omit
一句话概括 这四个工具类型加起来不到 10 行代码,却是 TypeScript 类型体操的”九九乘法表”——面试写不出来基本告别高级岗,写出来后什么 DeepPartial、Mutable、PartialByKeys 都是它们的排列组合。 核心手写 1. Partial——全部变可选 type MyPartial<T> = { [P in keyof T]?: T[P...
一句话概括 这四个工具类型加起来不到 10 行代码,却是 TypeScript 类型体操的”九九乘法表”——面试写不出来基本告别高级岗,写出来后什么 DeepPartial、Mutable、PartialByKeys 都是它们的排列组合。 核心手写 1. Partial——全部变可选 type MyPartial<T> = { [P in keyof T]?: T[P...
一句话概括 infer 就是类型世界的”正则捕获组”——在条件类型的匹配模式里声明一个变量,TS 自动把匹配到的类型片段填进去,从此提取返回值、解构 Promise、拆数组元素都是一行代码的事。 核心知识点 1. infer 只能在条件类型的 extends 里用 // 语法:T extends 模式 ? (这里用 infer R) : else type MyReturnType&...
一句话概括 类型守卫就是你写的 if 判断,TypeScript 编译器能”看懂”——typeof x === "string" 之后,x 在 if 块里就是 string,不用手动 as,也不用担心运行时炸。 核心知识点 1. typeof 守卫——基本类型判断 function format(x: string | number) { if (typeof x === "st...
一句话概括 映射类型 = keyof + in + 索引访问——它让类型也拥有了”循环”,一行 [P in keyof T] 就能把对象的每个属性遍历一遍并改造,是 Partial / Pick / Readonly 等内置工具类型的底层引擎。 核心知识点 1. 三件套:keyof、in、T[P] // keyof:取出所有键名 → 联合类型 type Keys = keyof { ...
一句话概括 条件类型就是类型系统里的 if-else——T extends U ? X : Y,写一行就能根据输入类型动态决定输出类型,是所有内置工具类型和类型体操的基石。 核心知识点 1. 基础语法:类型三元表达式 type IsString<T> = T extends string ? "yes" : "no"; type A = IsString<"hel...
一句话概括 TypeScript 的类型系统不是”看懂”了就会写的——接口定义、泛型推导、keyof 组合这些必须上手敲出来,才能从”认识”变成”肌肉记忆”。 核心练习 练习 1:接口进阶——readonly、可选、联合 // 定义 User 接口:id 只读、email 可选、address 可以是对象或 null interface User { readonly id: n...
一句话概括 enum 是 TypeScript 少数几个会”活到运行时”的语法:数字枚举变双向映射对象,const enum 直接蒸发不留痕迹,做错选择要么多打几 KB,要么 isolatedModules 炸给你看。 核心知识点 1. 数字枚举 → 双向映射对象 enum Direction { Up, Down, Left, Right } // 编译后的 JS(简化理解): ...
一句话概括 泛型就是给类型留个”占位符”——写代码时不写死类型,用的时候再填,既能复用代码又不丢类型安全。它是 TypeScript 从”能用”到”好用”的分界线。 核心知识点 1. 泛型函数:一份代码,N 种类型 // ❌ 不用泛型:any 丢了类型信息 function echo(x: any): any { return x; } const a = echo("hi"); /...
一句话概括 interface 和 type 都能描述对象形状,但 interface 支持声明合并(开扩展点),type 能定义联合/交叉/元组(灵活组合)——选型不是喜好问题,是场景问题。默认 interface,需要联合/元组时用 type,库的类型定义优先 interface。 核心知识点 1. 对象定义能力 —— 几乎等价 // interface 写法 interface...
一句话概括 TypeScript 基础类型不是背 string | number | boolean——核心是三个安全支柱:用 unknown 锁死 any、用 strictNullChecks 显式化空值、用 never 做穷尽检查——选哪条路决定了你代码的类型安全等级。 核心知识点 1. 基础类型速览 // 基本类型 let name: string = 'TS'; let ag...