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'])); // 报错
相关推荐
_光光10 小时前
任务队列及大文件上传实现(前端篇)
前端·react.js·typescript
濮水大叔1 天前
VonaJS AOP编程🚀大杀器🔪:外部切面
typescript·node.js·nestjs
濮水大叔1 天前
VonaJS AOP编程大杀器:外部切面
typescript·nodejs·nestjs
还是大剑师兰特2 天前
TypeScript 面试题及详细答案 100题 (91-100)-- 工程实践与框架集成
前端·javascript·typescript·1024程序员节
fruge2 天前
TypeScript 基础类型与接口详解
javascript·ubuntu·typescript
海鸥两三3 天前
Uni-App(Vue3 + TypeScript)项目结构详解 ------ 以 Lighting-UniApp 为例,提供源代码
vue.js·typescript·uni-app·1024程序员节
菜鸟una4 天前
【微信小程序 + 消息订阅 + 授权】 微信小程序实现消息订阅流程介绍,代码示例(仅前端)
前端·vue.js·微信小程序·小程序·typescript·taro·1024程序员节
前端初见4 天前
快速上手TypeScript,TS速通
javascript·ubuntu·typescript
郑板桥304 天前
TypeScript:npm的types、typings、@type的区别
javascript·typescript·npm
Java陈序员4 天前
免费高颜值!一款跨平台桌面端视频资源播放器!
vue.js·typescript·electron