typescript:第十四章_类型操作符

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

typescript:第十四章_类型操作符 [2026/03/09 15:26] – 创建 张叶安typescript:第十四章_类型操作符 [2026/04/27 20:11] (当前版本) 张叶安
行 11: 行 11:
 keyof 操作符用于获取类型的所有键组成的联合类型。 keyof 操作符用于获取类型的所有键组成的联合类型。
  
-<code typescript>+<code javascript>
 interface Person { interface Person {
   name: string;   name: string;
行 39: 行 39:
 ==== 14.1.2 keyof 与索引签名 ==== ==== 14.1.2 keyof 与索引签名 ====
  
-<code typescript>+<code javascript>
 // 字符串索引签名 // 字符串索引签名
 interface StringDictionary { interface StringDictionary {
行 65: 行 65:
 ==== 14.1.3 实战应用:pick 函数 ==== ==== 14.1.3 实战应用:pick 函数 ====
  
-<code typescript>+<code javascript>
 // 实现类型安全的对象选择 // 实现类型安全的对象选择
 function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> { function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
行 102: 行 102:
 在类型上下文中,typeof 用于获取变量或表达式的类型。 在类型上下文中,typeof 用于获取变量或表达式的类型。
  
-<code typescript>+<code javascript>
 // 获取对象类型 // 获取对象类型
 const person = { const person = {
行 136: 行 136:
 ==== 14.2.2 typeof 与 const 断言结合 ==== ==== 14.2.2 typeof 与 const 断言结合 ====
  
-<code typescript>+<code javascript>
 // 使用 const 断言获得更精确的类型 // 使用 const 断言获得更精确的类型
 const config = { const config = {
行 168: 行 168:
 ==== 14.2.3 实战:从运行时对象创建类型 ==== ==== 14.2.3 实战:从运行时对象创建类型 ====
  
-<code typescript>+<code javascript>
 // 运行时配置对象 // 运行时配置对象
 const API_ENDPOINTS = { const API_ENDPOINTS = {
行 204: 行 204:
 in 操作符用于遍历联合类型的每个成员,常用于创建映射类型。 in 操作符用于遍历联合类型的每个成员,常用于创建映射类型。
  
-<code typescript>+<code javascript>
 // 基础映射类型 - 将所有属性变为只读 // 基础映射类型 - 将所有属性变为只读
 type Readonly<T> = { type Readonly<T> = {
行 236: 行 236:
 ==== 14.3.2 重映射键名(TypeScript 4.1+)===== ==== 14.3.2 重映射键名(TypeScript 4.1+)=====
  
-<code typescript>+<code javascript>
 // 使用 as 重映射键名 // 使用 as 重映射键名
 type Getters<T> = { type Getters<T> = {
行 271: 行 271:
 ==== 14.3.3 实战:创建事件处理器类型 ==== ==== 14.3.3 实战:创建事件处理器类型 ====
  
-<code typescript>+<code javascript>
 // 根据属性创建对应的事件处理器类型 // 根据属性创建对应的事件处理器类型
 type EventHandlers<T> = { type EventHandlers<T> = {
行 327: 行 327:
 is 关键字用于创建返回 boolean 的自定义类型保护函数。 is 关键字用于创建返回 boolean 的自定义类型保护函数。
  
-<code typescript>+<code javascript>
 // 基本类型保护 // 基本类型保护
 function isString(value: unknown): value is string { function isString(value: unknown): value is string {
行 350: 行 350:
 ==== 14.4.2 复杂类型保护 ==== ==== 14.4.2 复杂类型保护 ====
  
-<code typescript>+<code javascript>
 // 接口定义 // 接口定义
 interface Cat { interface Cat {
行 399: 行 399:
 ==== 14.4.3 泛型类型保护 ==== ==== 14.4.3 泛型类型保护 ====
  
-<code typescript>+<code javascript>
 // 检查对象是否有某个属性 // 检查对象是否有某个属性
 function hasProperty<T extends string>( function hasProperty<T extends string>(
行 433: 行 433:
 条件类型根据类型关系选择两种类型之一,语法类似三元运算符。 条件类型根据类型关系选择两种类型之一,语法类似三元运算符。
  
-<code typescript>+<code javascript>
 // 基本语法: T extends U ? X : Y // 基本语法: T extends U ? X : Y
 type IsString<T> = T extends string ? true : false; type IsString<T> = T extends string ? true : false;
行 464: 行 464:
 当条件类型作用于泛型参数时,会自动分布到联合类型的每个成员。 当条件类型作用于泛型参数时,会自动分布到联合类型的每个成员。
  
-<code typescript>+<code javascript>
 // 分布式条件类型 // 分布式条件类型
 type ToArray<T> = T extends any ? T[] : never; type ToArray<T> = T extends any ? T[] : never;
行 488: 行 488:
 infer 用于在条件类型中推断类型变量。 infer 用于在条件类型中推断类型变量。
  
-<code typescript>+<code javascript>
 // 提取函数返回类型 // 提取函数返回类型
 type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never; type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
行 523: 行 523:
 ==== 14.6.1 基础映射类型 ==== ==== 14.6.1 基础映射类型 ====
  
-<code typescript>+<code javascript>
 // 只读类型 // 只读类型
 type Readonly<T> = { type Readonly<T> = {
行 563: 行 563:
 ==== 14.6.2 深度映射类型 ==== ==== 14.6.2 深度映射类型 ====
  
-<code typescript>+<code javascript>
 // 深度只读 // 深度只读
 type DeepReadonly<T> = { type DeepReadonly<T> = {
行 609: 行 609:
 ==== 14.7.1 基础模板字面量 ==== ==== 14.7.1 基础模板字面量 ====
  
-<code typescript>+<code javascript>
 // 字符串字面量拼接 // 字符串字面量拼接
 type EventName<T extends string> = `on${Capitalize<T>}`; type EventName<T extends string> = `on${Capitalize<T>}`;
行 629: 行 629:
 ==== 14.7.2 模板字面量的模式匹配 ==== ==== 14.7.2 模板字面量的模式匹配 ====
  
-<code typescript>+<code javascript>
 // 提取事件名 // 提取事件名
 type GetEvent<T extends string> =  type GetEvent<T extends string> = 
行 659: 行 659:
 ==== 14.8.1 组合多个操作符 ==== ==== 14.8.1 组合多个操作符 ====
  
-<code typescript>+<code javascript>
 // 提取对象的可选属性名 // 提取对象的可选属性名
 type OptionalKeys<T> = { type OptionalKeys<T> = {
行 686: 行 686:
 ==== 14.8.2 递归类型操作 ==== ==== 14.8.2 递归类型操作 ====
  
-<code typescript>+<code javascript>
 // 路径字符串生成 // 路径字符串生成
 type Path<T, K extends keyof T = keyof T> =  type Path<T, K extends keyof T = keyof T> = 
行 738: 行 738:
 实现一个函数,能够安全地获取对象的多个属性: 实现一个函数,能够安全地获取对象的多个属性:
  
-<code typescript>+<code javascript>
 function pluck<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> { function pluck<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
   // 实现   // 实现
行 764: 行 764:
 参考答案 参考答案
  
-<code typescript>+<code javascript>
 function pluck<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> { function pluck<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
   const result = {} as Pick<T, K>;   const result = {} as Pick<T, K>;
行 862: 行 862:
 实现以下类型工具: 实现以下类型工具:
  
-<code typescript>+<code javascript>
 // 1. 提取数组的嵌套层级深度 // 1. 提取数组的嵌套层级深度
 type ArrayDepth<T> = any; type ArrayDepth<T> = any;
行 875: 行 875:
 参考答案 参考答案
  
-<code typescript>+<code javascript>
 // 1. 数组嵌套深度 // 1. 数组嵌套深度
 type ArrayDepth<T, Depth extends number[] = []> =  type ArrayDepth<T, Depth extends number[] = []> = 
行 911: 行 911:
 实现一个类型安全的表单验证系统: 实现一个类型安全的表单验证系统:
  
-<code typescript>+<code javascript>
 // 要求: // 要求:
 // 1. 根据数据模型自动生成验证规则类型 // 1. 根据数据模型自动生成验证规则类型
行 920: 行 920:
 参考答案 参考答案
  
-<code typescript>+<code javascript>
 // 验证规则类型 // 验证规则类型
 interface ValidationRule<T> { interface ValidationRule<T> {

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • typescript/第十四章_类型操作符.txt
  • 最后更改: 2026/04/27 20:11
  • 张叶安