19 # 高级类型:索引类型

let obj = {
    a: 1,
    b: 2,
    c: 3
}
// 抽取值形成数组
function getValues(obj: any, keys: string[]) {
    return keys.map(k => obj[k])
}

console.log(getValues(obj, ['a', 'b'])); // [1, 2]
console.log(getValues(obj, ['e', 'f'])); // [undefined, undefined] 属性不存在也不报错

可以使用索引来约束处理这种问题。

索引类型查询操作符:keyof T 是一种索引类型查询操作符,用于获取类型 T 的所有属性名的联合类型。它可以用于访问和操作对象类型的属性名称。

interface Obj {
    a: number,
    b: string
}
let key: keyof Obj;

索引访问操作符:T[K] 表示类型 T 中索引为 K 的属性的类型。这种语法通常用于访问对象类型中特定属性的类型。

let value: Obj['a'];

泛型约束:T extends U

function getValues<T, K extends keyof T>(obj: T, keys: K[]): T[K][] {
    return keys.map(k => obj[k])
}

console.log(getValues(obj, ['a', 'b'])); // [1, 2]
console.log(getValues(obj, ['e', 'f'])); // 报错

相关推荐

  1. 19 # 高级类型索引类型

    2024-03-19 18:30:07       37 阅读
  2. MySQL索引索引类型

    2024-03-19 18:30:07       21 阅读
  3. MySQL - 索引类型详解

    2024-03-19 18:30:07       57 阅读
  4. MySQL的索引类型

    2024-03-19 18:30:07       42 阅读
  5. C++(14):获取类型在tuple中的索引

    2024-03-19 18:30:07       50 阅读
  6. Python高级数据类型

    2024-03-19 18:30:07       59 阅读
  7. TS的高级类型

    2024-03-19 18:30:07       53 阅读
  8. TS的高级类型

    2024-03-19 18:30:07       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 18:30:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 18:30:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 18:30:07       82 阅读
  4. Python语言-面向对象

    2024-03-19 18:30:07       91 阅读

热门阅读

  1. Vue关键字important强制指定样式优先级

    2024-03-19 18:30:07       37 阅读
  2. MQL语言实现抽象工厂模式

    2024-03-19 18:30:07       31 阅读
  3. git忽略已加到仓库的文件或文件夹

    2024-03-19 18:30:07       41 阅读
  4. springboot2.7集成es8 https方式绕过证书访问集群

    2024-03-19 18:30:07       40 阅读
  5. ChatGPT:利用人工智能提升论文撰写质量

    2024-03-19 18:30:07       237 阅读
  6. 二叉树|二叉树的非递归遍历

    2024-03-19 18:30:07       45 阅读
  7. 【渗透测试实战】什么是文件包含漏洞

    2024-03-19 18:30:07       46 阅读
  8. leetcode 202. 快乐数

    2024-03-19 18:30:07       36 阅读