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'])); // 报错
相关推荐
naildingding4 小时前
3-ts接口 Interface
前端·typescript
ZengLiangYi4 小时前
TypeScript 项目配置:tsconfig、ESM、路径别名
javascript·typescript·aigc
退休倒计时10 小时前
【每日一题】LeetCode 15. 三数之和 TypeScript
数据结构·算法·leetcode·typescript
FlyWIHTSKY12 小时前
JavaScript 和 TypeScript 分别是什么,可以相互写吗
javascript·ubuntu·typescript
云水一下12 小时前
TypeScript 从零基础到精通(七):从配置到全栈项目落地
前端·javascript·typescript
Aolith13 小时前
从 Pinia 到 Zustand:我在 React 里复刻了一套用户状态管理
前端·react.js·typescript
Aolith13 小时前
Express + TypeScript 下写 JWT 中间件,我踩了三个坑
typescript·node.js·express
夜雪闻竹1 天前
测试策略:单元测试 + 集成测试怎么写
typescript·单元测试·集成测试·chatcrystal
JieE2121 天前
Bun + TypeScript:下一代 JavaScript 全栈开发的正确打开方式
typescript·全栈·bun
GuWenyue1 天前
告别JS类型坑!Ts为什么在ai时代逐渐成为"第一"语言
前端·算法·typescript