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'])); // 报错
相关推荐
吴声子夜歌3 小时前
TypeScript——类型基础(二)
linux·ubuntu·typescript
Wect8 小时前
LeetCode 215. 数组中的第K个最大元素:大根堆解法详解
前端·算法·typescript
必然秃头8 小时前
下篇:TypeScript 高级特性(高级类型、类型操作、最佳实践)
typescript
吴声子夜歌9 小时前
TypeScript——内置工具类型、类型查询、类型断言和类型细化
linux·ubuntu·typescript
楚轩努力变强10 小时前
2026 年前端进阶:端侧大模型 + WebGPU,从零打造高性能 AI 原生前端应用
前端·typescript·大模型·react·webgpu·ai原生·高性能前端
吴声子夜歌10 小时前
TypeScript——索引类型、映射对象类型、条件类型
git·ubuntu·typescript
吴声子夜歌11 小时前
TypeScript——局部类型、联合类型、交叉类型
javascript·git·typescript
紫_龙1 天前
最新版vue3+TypeScript开发入门到实战教程之路由详解三
前端·javascript·typescript
belldeep1 天前
nodejs:Vite + Svelte + ts 入门示例
typescript·node.js·ts·vite·svelte