typescript映射类型是批量转换对象属性类型的工具,通过in遍历keyof键并结合条件类型实现只读、可选、类型转换及键过滤等操作,内置partial、required等工具类型均基于此原理。

在 TypeScript 中,映射类型是批量转换对象属性类型的强大工具,无需手动逐个重写接口。核心在于用 in 遍历键,结合 keyof 和条件类型,灵活修改每个属性的类型或修饰符。
基础映射:统一转为只读或可选
最常用的是把所有属性设为只读或可选:
-
只读化:用
readonly修饰每个属性
type User = { name: string; age: number };
type ReadonlyUser = { readonly [K in keyof User]: User[K] };
// 等价于 { readonly name: string; readonly age: number }
-
可选化:加
?让所有字段变成可选
type PartialUser = { [K in keyof User]?: User[K] };
类型转换:批量修改属性值类型
可在映射中对每个属性值做类型变换,比如全部转成字符串或包装成 Promise:
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
- 全部转为字符串类型:
[K in keyof T]: string - 全部包装为 Promise:
[K in keyof T]: Promise<t></t> - 保留原类型但加非空断言(排除 null/undefined):
[K in keyof T]-?: NonNullable<t></t>
type Stringified<t> = { [K in keyof T]: string };
type UserStrings = Stringified<user>; // { name: string; age: string }</user></t>
键过滤 + 类型映射:按条件处理特定属性
结合条件类型,可只对满足条件的键做映射。例如仅将字符串属性转为大写格式类型:
- 用
extends判断T[K]是否为string - 是则映射为
Uppercase<string></string>,否则保持原类型
type UppercaseStringProps<t> = {
[K in keyof T]: T[K] extends string ? Uppercase<t> : T[K];
};
type Mixed = { id: number; title: 'hello'; tag: string };
type Result = UppercaseStringProps<mixed>;
// { id: number; title: 'HELLO'; tag: string }</mixed></t></t>
实用组合:内置工具类型背后的原理
TypeScript 内置的 Partial、Required、Readonly、Record 全部基于映射类型实现。理解它们有助于自定义扩展:
-
Record<k v></k>就是{ [P in K]: V } -
Required<t></t>是{ [K in keyof T]-?: T[K] }(去掉可选修饰符) - 可组合多个映射,如
Readonly<partial>></partial>
不复杂但容易忽略细节:键名类型必须是 string | number | symbol 的联合;映射中不能新增键,只能重映射已有键。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










