- TypeScript 基础
- TypeScript - 首页
- TypeScript - 路线图
- TypeScript - 概述
- TypeScript - 环境设置
- TypeScript - 基本语法
- TypeScript vs. JavaScript
- TypeScript - 特性
- TypeScript - 变量
- TypeScript - let & const
- TypeScript - 运算符
- TypeScript 基本类型
- TypeScript - 类型
- TypeScript - 类型注解
- TypeScript - 类型推断
- TypeScript - 数字
- TypeScript - 字符串
- TypeScript - 布尔值
- TypeScript - 数组
- TypeScript - 元组
- TypeScript - 枚举
- TypeScript - Any
- TypeScript - Never
- TypeScript - 联合类型
- TypeScript - 字面量类型
- TypeScript - 符号
- TypeScript - null vs. undefined
- TypeScript - 类型别名
- TypeScript 控制流
- TypeScript - 决策
- TypeScript - If 语句
- TypeScript - If Else 语句
- TypeScript - 嵌套 If 语句
- TypeScript - Switch 语句
- TypeScript - 循环
- TypeScript - For 循环
- TypeScript - While 循环
- TypeScript - Do While 循环
- TypeScript 函数
- TypeScript - 函数
- TypeScript - 函数类型
- TypeScript - 可选参数
- TypeScript - 默认参数
- TypeScript - 匿名函数
- TypeScript - 函数构造器
- TypeScript - Rest 参数
- TypeScript - 参数解构
- TypeScript - 箭头函数
- TypeScript 接口
- TypeScript - 接口
- TypeScript - 扩展接口
- TypeScript 类和对象
- TypeScript - 类
- TypeScript - 对象
- TypeScript - 访问修饰符
- TypeScript - 只读属性
- TypeScript - 继承
- TypeScript - 静态方法和属性
- TypeScript - 抽象类
- TypeScript - 访问器
- TypeScript - 鸭子类型
- TypeScript 高级类型
- TypeScript - 交叉类型
- TypeScript - 类型守卫
- TypeScript - 类型断言
- TypeScript 类型操作
- TypeScript - 从类型创建类型
- TypeScript - Keyof 类型运算符
- TypeScript - Typeof 类型运算符
- TypeScript - 索引访问类型
- TypeScript - 条件类型
- TypeScript - 映射类型
- TypeScript - 模板字面量类型
- TypeScript 泛型
- TypeScript - 泛型
- TypeScript - 泛型约束
- TypeScript - 泛型接口
- TypeScript - 泛型类
- TypeScript 杂项
- TypeScript - 三斜杠指令
- TypeScript - 命名空间
- TypeScript - 模块
- TypeScript - 环境声明
- TypeScript - 装饰器
- TypeScript - 类型兼容性
- TypeScript - 日期对象
- TypeScript - 迭代器和生成器
- TypeScript - Mixins
- TypeScript - 实用程序类型
- TypeScript - 装箱和拆箱
- TypeScript - tsconfig.json
- 从 JavaScript 到 TypeScript
- TypeScript 有用资源
- TypeScript - 快速指南
- TypeScript - 有用资源
- TypeScript - 讨论
TypeScript - 索引访问类型
在 TypeScript 中,索引访问类型也称为查找类型。它用于访问另一个类型的属性类型。这是一种强大的方式,有助于访问复杂类型结构的类型属性。此功能允许您更有效地使用类型系统,确保在涉及属性访问和操作的场景中类型安全。
语法
您可以按照以下语法在 TypeScript 中使用索引访问类型。
type new_type = existing_type[key];
在以上语法中,'type' 是一个用于定义新类型的关键字。
'existing_type' 是一个已存在的类型。
“key”是 existing_type 的一个属性,我们需要获取其类型。
示例
让我们通过一些 TypeScript 中的示例来了解索引访问类型。
示例:访问对象属性类型
当您需要获取现有类型的特定属性的类型时,索引访问类型非常有用。
在下面的代码中,我们定义了 User 类型,其中包含数字类型的 id 和 age 属性,以及字符串类型的 name 属性。
User['name'] 用于访问 User 类型 'name' 属性的类型,即字符串。
接下来,我们定义了 userName 变量,其类型为 'UserNameType'(字符串)。如果您尝试将数字分配给 userName 变量,它将抛出错误。
type User = { id: number; name: string; age: number; }; // Access the type of 'name' property from User type UserNameType = User['name']; // type is string let userName: UserNameType; userName = "Alice"; // Ok console.log(userName); // Alice // userName = 123; // Error: Type 'number' is not assignable to type 'string'.
编译后,它将生成以下 JavaScript 代码。
let userName; userName = "Alice"; // Ok console.log(userName); // Alice // userName = 123; // Error: Type 'number' is not assignable to type 'string'.
输出
Alice
示例:访问嵌套对象属性类型
当您需要获取复杂类型结构的任何属性的类型时,索引访问类型更有用。
在下面的代码中,'Product' 类型具有 id 和 details 属性。details 属性是一个嵌套类型,包含 name 和 price 属性。
我们使用 Product['details']['price'] 来访问 'details' 属性的 'price' 属性的类型,它是一个数字。
type Product = { id: number; details: { name: string; price: number; }; }; // Access the type of the nested 'price' property type ProductPriceType = Product['details']['price']; // type is number let price: ProductPriceType; price = 19.99; // Correct usage console.log(price); // Output: 19.99 // price = "20.00"; // Error: Type 'string' is not assignable to type 'number'.
编译后,它将生成以下 JavaScript 代码。
let price; price = 19.99; // Correct usage console.log(price); // Output: 19.99 // price = "20.00"; // Error: Type 'string' is not assignable to type 'number'.
输出
19.99
示例:将 keyof 运算符与索引访问类型一起使用
此示例类似于第一个示例。在这里,我们使用了 'keyof' 运算符来访问 User 类型的全部键。
当您将 Keyof 运算符与类型一起使用并将其用作索引值时,它将获取对象所有属性的类型联合。这里,'keyof User' 给我们 number | string,它是 User 类型所有属性的类型。
type User = { id: number; name: string; age: number; }; // Access the type of 'name' property from User type UserNameType = User[keyof User]; // type is number | string let userName: UserNameType; userName = "Hello"; // Correct usage console.log(userName); // Output: Hello userName = 123; // Correct usage console.log(userName); // Output: 123
编译后,它将生成以下 JavaScript 代码。
let userName; userName = "Hello"; // Correct usage console.log(userName); // Output: Hello userName = 123; // Correct usage console.log(userName); // Output: 123
输出
Hello 123
示例:使用数组进行索引访问
当您想访问数组元素的类型时,可以使用 'number' 作为索引。
在下面的代码中,我们定义了 StringArray 类型,它包含字符串的数组。
'StringArray[number]' 获取数组元素的类型,即字符串。
type StringArray = string[]; // Access the type of an array element type ElementType = StringArray[number]; // type is string let element: ElementType; element = "Hello"; // Correct usage console.log(element); // element = 123; // Error: Type 'number' is not assignable to type 'string'.
编译后,它将生成以下 JavaScript 代码。
let element; element = "Hello"; // Correct usage console.log(element); // element = 123; // Error: Type 'number' is not assignable to type 'string'.
输出
Hello
这样,您可以使用索引访问类型访问现有类型的属性类型。您还可以使用 'number' 属性来访问数组元素的类型。