TypeScript-索引访问操作符

简介: TypeScript-索引访问操作符

前言


TypeScript的索引访问操作符(Index Access Operator)允许您通过变量名或字符串来访问对象的属性。这种灵活性使您可以在运行时动态确定要访问的属性名称,增强了代码的可扩展性和动态性。例如,您可以使用obj[key]来访问对象obj中名为key的属性,这在处理动态数据或配置时非常有用。这一特性让TypeScript在应对各种数据结构和动态场景时表现得更为强大。


通过 [] 索引类型访问操作符, 我们就能得到某个索引的类型

class Person {
    name: string;
    age: number;
}
type MyType = Person['name'];

验证方式为,按住键盘的 ctrl 键 + 鼠标左键然后放到 MyType 上方即可。




应用场景


博主假设有这么一个需求: 获取指定对象, 部分属性的值, 放到数组中返回:

首先在来演变过程也就是说先不给出最终完整的代码:

let obj = {
    name: 'yangbuyiya',
    age: 18,
    gender: true
}
function getValues<T, K extends keyof T>(obj: T, keys: K[]) {
    let arr = [];
    keys.forEach(key => {
        arr.push(obj[key]);
    });
    return arr;
}
let res = getValues(obj, ['name', 'age']);
console.log(res);

运行效果如下发现是可以进行实现的,但是还是有问题:


如上的函数我是没有指定具体的返回的数据类型的,如果要指定返回的数据类型,那么就可能是 string、number、boolean、那么这个时候就可以利用 索引类型访问操作符 来进行解决该问题最终代码如下:

let obj = {
    name: 'yangbuyiya',
    age: 18,
    gender: true
}
function getValues<T, K extends keyof T>(obj: T, keys: K[]): T[K][] {
    let arr = [] as T[K][];
    keys.forEach(key => {
        arr.push(obj[key]);
    })
    return arr;
}
let res = getValues(obj, ['name', 'age']);
console.log(res);

通过索引类型访问操作符解决该问题其实它内部就是自动转换为了联合,例如我现在返回的既有 string、又有 number 那么返回值类型就自动转换为了 (string | number)[],验证方式为,按住键盘的 ctrl 键 + 鼠标左键然后放到 res 上方即可。




索引访问操作符注意点


不会返回 null/undefined/never 类型

interface TestInterface {
    a: string,
    b: number,
    c: boolean,
    d: symbol,
    e: null,
    f: undefined,
    g: never
}
type MyType = TestInterface[keyof TestInterface];

验证方式为,按住键盘的 ctrl 键 + 鼠标左键然后放到 MyType 上方即可。



最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
7月前
|
索引
TypeScript-可选属性和索引签名
TypeScript-可选属性和索引签名
38 0
|
7月前
|
JavaScript
TypeScript 对象解构操作符在 Spartacus 实际项目开发中的应用
TypeScript 对象解构操作符在 Spartacus 实际项目开发中的应用
45 0
|
4月前
|
JavaScript 算法 前端开发
TypeScript算法专题 - blog2 - 单链表节点的索引、结点删除与链表反转
TypeScript算法专题 - blog2 - 单链表节点的索引、结点删除与链表反转
31 0
|
9月前
|
存储 JavaScript 测试技术
Typescript - 索引签名
索引签名是 TypeScript 中一个强大的特性,它允许我们在对象和类中使用动态的属性名称。通常情况下,我们会在对象或类中定义固定的属性,但有时我们需要处理具有动态属性名称的情况。这时,索引签名就派上了用场。 在这篇技术博文中,我们将介绍索引签名的使用方法和用例,将展示如何定义带有索引签名的接口和类,并演示如何使用索引签名来访问对象属性和处理动态属性名称的数据。我们还会讨论一些索引签名的注意事项,比如索引签名的顺序和使用 readonly 修饰符。
100 1
Typescript - 索引签名
|
7月前
|
JavaScript
TypeScript中常见的操作符运算符总结
TypeScript中常见的操作符运算符总结
|
7月前
|
JavaScript 开发者 索引
TypeScript-索引签名和只读属性
TypeScript-索引签名和只读属性
35 0
|
JavaScript 索引
ts(typescript)面向对象之索引器
在TS中,默认情况下,不对索引器(成员表达式)做严格的类型检查使用配置noImplicitAny:true开启对隐式any的检查。
ts(typescript)面向对象之索引器
|
JavaScript 前端开发 安全
TypeScript 4.9 beta 发布:鸽置的 ES 装饰器、satisfies 操作符、类型收窄增强、单文件级别配置等
TypeScript 已于 2022.09.23 发布 4.9 beta 版本,你可以在 [4.9 Iteration Plan](https://github.com/microsoft/TypeScript/issues/50457) 查看所有被包含的 Issue 与 PR。如果想要抢先体验新特性,执行: ```bash $ npm install typescript@beta ```
|
索引
typescript68-索引查询类型(查询多个)
typescript68-索引查询类型(查询多个)
70 0
typescript68-索引查询类型(查询多个)
|
索引
typescript63-索引签名类型
typescript63-索引签名类型
69 0
typescript63-索引签名类型