映射类型与模板字面量
约 263 字小于 1 分钟
布欧-Lewyon
2026-05-16
首页 › TypeScript › 高级类型 › 映射类型与模板字面量
映射类型基础
type MyPartial<T> = {
[K in keyof T]?: T[K];
};
type MyReadonly<T> = {
readonly [K in keyof T]: T[K];
};
interface User {
name: string;
age: number;
}
type PartialUser = MyPartial<User>;
// { name?: string; age?: number }键重映射
// 为所有属性添加前缀
type AddPrefix<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: T[K];
};
type UserWithGetters = AddPrefix<{ name: string; age: number }>;
// { getName: string; getAge: number }
// 排除特定属性
type WithoutType<T, U> = {
[K in keyof T as T[K] extends U ? never : K]: T[K];
};模板字面量 + 映射类型
// 监听事件类型
type EventName = 'click' | 'focus' | 'blur';
type EventHandler = {
[K in EventName as `on${Capitalize<K>}`]: () => void;
};
// { onClick: () => void; onFocus: () => void; onBlur: () => void }小结
| 语法 | 作用 |
|---|---|
{ [K in keyof T]: T[K] } | 映射类型 |
as 重映射 | 修改键名 |
| 模板字面量 | 字符串类型运算 |
Capitalize / Uppercase 等 | 字符串工具类型 |
上一节:条件类型与 infer 下一节:satisfies、类型谓词与品牌类型
