当前位置: 首页 > wzjs >正文

沈阳seo关键词排名北京seo推广系统

沈阳seo关键词排名,北京seo推广系统,百度创建网站,电商美工培训以下是 TypeScript 在前端项目中 常用的映射类型&#xff08;Mapped Types&#xff09;&#xff0c;结合具体场景和代码示例&#xff0c;帮助开发者高效处理复杂类型&#xff1a; 一、基础映射类型 1. Partial<T> 作用&#xff1a;将对象类型 T 的所有属性变为可选。 实…

以下是 TypeScript 在前端项目中 常用的映射类型(Mapped Types),结合具体场景和代码示例,帮助开发者高效处理复杂类型:


一、基础映射类型

1. Partial<T>

作用:将对象类型 T 的所有属性变为可选。
实现

type Partial<T> = {[P in keyof T]?: T[P];
};

应用场景

  • 表单的初始状态(部分字段可选)。

  • API 请求的更新参数(只需传部分字段)。

interface User {name: string;age: number;
}type PartialUser = Partial<User>;
// { name?: string; age?: number }const initialForm: PartialUser = {}; // 合法

2. Required<T>

作用:将对象类型 T 的所有属性变为必填。
实现

type Required<T> = {[P in keyof T]-?: T[P]; // "-?" 表示移除可选修饰符
};

应用场景

  • 严格校验配置对象(确保所有字段必须存在)。

type StrictConfig = Required<{ apiUrl?: string }>;
// { apiUrl: string }const config: StrictConfig = { apiUrl: "https://api.com" }; // 必须填写

3. Readonly<T>

作用:将对象类型 T 的所有属性变为只读。
实现

type Readonly<T> = {readonly [P in keyof T]: T[P];
};

应用场景

  • 全局常量配置(防止意外修改)。

  • React 组件的默认 Props。

const defaultProps: Readonly<{ color: string }> = { color: "red" };
defaultProps.color = "blue"; // 编译报错:只读属性

4. Pick<T, K>

作用:从对象类型 T 中选取指定键 K 的子集。
实现

type Pick<T, K extends keyof T> = {[P in K]: T[P];
};

应用场景

  • 组件 Props 的透传(如仅暴露部分属性)。

  • 过滤敏感字段(如排除 password)。

interface User {id: string;name: string;password: string;
}type SafeUser = Pick<User, "id" | "name">;
// { id: string; name: string }

5. Omit<T, K>

作用:从对象类型 T 中排除指定键 K 的属性。
实现

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

应用场景

  • 覆盖组件默认 Props。

  • 忽略不需要的 API 响应字段。

type UserWithoutPassword = Omit<User, "password">;
// { id: string; name: string }

6. Record<K, T>

作用:创建一个键类型为 K,值类型为 T 的对象类型。
实现

type Record<K extends keyof any, T> = {[P in K]: T;
};

应用场景

  • 枚举映射(如国际化词表)。

  • Redux 的 Action 类型集合。

type Language = "en" | "zh";
type I18N = Record<Language, { title: string }>;const i18n: I18N = {en: { title: "Hello" },zh: { title: "你好" },
};

二、进阶映射类型

1. 条件映射:{ [K in keyof T]: T[K] extends U ? X : Y }

作用:根据条件筛选或转换属性类型。
应用场景

  • 提取所有函数属性。

  • 将数字属性转为字符串。

type FunctionKeys<T> = {[K in keyof T]: T[K] extends Function ? K : never;
}[keyof T]; // 最终得到联合类型type UserMethods = FunctionKeys<User>; // "update" | "delete"

2. 深度映射:DeepReadonly / DeepPartial

作用:递归处理嵌套对象属性。
实现

type DeepReadonly<T> = {readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];
};type DeepPartial<T> = {[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
};

应用场景

  • 深度冻结状态(如 Redux 的不可变状态树)。

  • 表单的嵌套字段可选。

interface NestedData {user: { name: string; address: { city: string } };
}type ReadonlyData = DeepReadonly<NestedData>;
// user 和 address 均为只读

3. 联合类型映射:{ [K in keyof T]: T[K] }

作用:将联合类型转为交叉类型或其他结构。
应用场景

  • 合并多个接口类型。

type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;type Combined = UnionToIntersection<{ a: 1 } | { b: 2 }>;
// { a: 1 } & { b: 2 }

三、前端实战场景

场景 1:动态表单控件 Props

根据表单字段类型生成对应的 UI 控件 Props。

type FieldType = "text" | "number" | "date";type FieldProps<T extends FieldType> = {type: T;value: T extends "text" ? string :T extends "number" ? number :Date;
};function renderField<T extends FieldType>(props: FieldProps<T>) {// 根据 type 渲染不同控件
}

场景 2:Redux Action 类型安全

自动推导 Action 类型,避免手动定义。

type ActionMap<M extends { [key: string]: any }> = {[Key in keyof M]: M[Key] extends undefined? { type: Key }: { type: Key; payload: M[Key] };
};type Actions = ActionMap<{LOGIN: { username: string };LOGOUT: undefined;
}>;// 结果:
// { LOGIN: { type: "LOGIN"; payload: { username: string } }, 
//   LOGOUT: { type: "LOGOUT" } }

场景 3:组件 Props 动态扩展

通过映射类型动态生成复合 Props。

type WithClassName<T> = T & { className?: string };type ButtonProps = WithClassName<{onClick: () => void;text: string;
}>;// 结果:{ onClick: () => void; text: string; className?: string }

四、总结

映射类型核心能力典型场景
Partial<T>属性可选化表单初始值、更新参数
Pick<T, K> / Omit<T, K>属性筛选或排除组件 Props 透传
Record<K, T>键值对批量定义枚举映射、Action 集合
条件映射按条件转换属性类型动态表单控件
深度映射递归处理嵌套对象不可变状态、复杂表单

掌握这些映射类型后,可以大幅减少重复代码,提升前端项目的类型安全性和可维护性

http://www.dtcms.com/wzjs/523364.html

相关文章:

  • 给网站做外链要注意哪些seo关键词排名优化报价
  • 做金融看哪些网站有哪些百度seo推广工具
  • 微信网页杭州关键词优化平台
  • 怎么看一个网站是谁做的北京百度科技有限公司电话
  • 如何做网络投票网站有什么平台可以发布推广信息
  • 山东住房和城乡建设部网站注册一个公司网站需要多少钱
  • 餐饮加盟培训网站建设营销网站建设推广
  • 上海网站建设价格网络黄页推广软件哪个好
  • 南宁做网站比较好的公司有哪些学设计什么培训机构好
  • 网站开发接私单世界最新新闻
  • 如何选择佛山网站建设北京seo推广外包
  • 如何查看网站是哪家公司做的?2345网址导航应用
  • 付运费送东西的网站怎么做6东莞seo建站优化工具
  • 网站建设 软件外贸seo推广公司
  • 搜英文关键词网站app运营推广策划方案
  • 如何做好一个购物网站网络营销的12种手段
  • 展示设计毕业论文题目推广seo是什么意思
  • 外贸网址建站本网站三天换一次域名
  • wordpress 缓存文件 手动删除seo排名优化培训怎样
  • 网站用哪个做福州seo外包公司
  • 网站域名怎么申请衡阳seo排名
  • 比较有特色的网站免费网站安全检测
  • 网站模块在线制作云南网络推广服务
  • 哪个网站可以做兼职网站seo诊断
  • 建设网站备案不通过怎么办怎么去推广自己的产品
  • 昆明城乡建设局网站seo营销技巧
  • 武汉双军网站建设公司如何加入百度推广
  • 银川做网站公司seo收费标准
  • 泰安新闻视频在线东莞seo搜索
  • 河南专业网站建设公司哪家好搜索引擎营销与seo优化