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'])); // 报错
相关推荐
老前端的功夫19 小时前
TypeScript 类型守卫:从编译原理到高级模式
前端·javascript·架构·typescript
ttod_qzstudio19 小时前
备忘录之事件监听器绑定陷阱:为什么 .bind(this) 会移除失败?
javascript·typescript·内存泄漏·事件监听
Hao_Harrision1 天前
50天50个小项目 (React19 + Tailwindcss V4) ✨ | DoubleClickHeart(双击爱心)
前端·typescript·react·tailwindcss·vite7
梦6501 天前
基于 Vue3 + TypeScript 封装 UEditor 富文本编辑器组件
前端·vue.js·typescript
千寻girling2 天前
计算机组成原理-全通关源码-实验(通关版)---头歌平台
前端·面试·职场和发展·typescript·node.js
yanghuashuiyue2 天前
Vue3难以统一的命名规范
前端·vue.js·typescript
JQ_Zhang3 天前
消失的光标——深度解析:Slate.js 全量更新结构后的光标恢复方案
typescript
cypking3 天前
解决 TypeScript 找不到静态资源模块及类型声明问题
前端·javascript·typescript
开发者小天3 天前
React中useCallback的使用
前端·javascript·react.js·typescript·前端框架·css3·html5
snow@li3 天前
小程序-uniapp:vue3-typescript项目使用mp-html实现展示富文本
javascript·typescript·uni-app