19 # 高级类型:索引类型

ts 复制代码
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 的所有属性名的联合类型。它可以用于访问和操作对象类型的属性名称。

ts 复制代码
interface Obj {
    a: number,
    b: string
}
let key: keyof Obj;

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

ts 复制代码
let value: Obj['a'];

泛型约束:T extends U

ts 复制代码
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'])); // 报错
相关推荐
阿蒙Amon2 小时前
TypeScript学习-第2章:基础类型
javascript·学习·typescript
EndingCoder2 小时前
Node.js 与 TypeScript:服务器端开发
前端·javascript·typescript·node.js
EndingCoder3 小时前
React 与 TypeScript:组件类型化
前端·javascript·react.js·typescript·前端框架
We་ct12 小时前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
许泽宇的技术分享14 小时前
当 AI 助手遇上全平台消息:Clawdbot 的架构奇遇记
人工智能·typescript·ai助手
孟无岐16 小时前
【Laya】Socket 使用指南
websocket·typescript·游戏引擎·游戏程序·laya
We་ct17 小时前
LeetCode 125. 验证回文串:双指针解法全解析与优化
前端·算法·leetcode·typescript
We་ct19 小时前
LeetCode 68. 文本左右对齐:贪心算法的两种实现与深度解析
前端·算法·leetcode·typescript
EndingCoder1 天前
设计模式在 TypeScript 中的实现
前端·typescript
奔跑的web.1 天前
TypeScript namespace 详解:语法用法与使用建议
开发语言·前端·javascript·vue.js·typescript