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'])); // 报错
相关推荐
乐影6 小时前
TS 模板字符串类型:从基础到进阶的类型编程魔法
前端·typescript
柯南二号7 小时前
【大前端】 TypeScript vs JavaScript:全面对比与实践指南
前端·javascript·typescript
濮水大叔14 小时前
VonaJS AOP编程:全局中间件全攻略
typescript·nodejs·nestjs
歪歪10014 小时前
ts-jest与其他TypeScript测试工具的对比
前端·javascript·测试工具·typescript·前端框架
mit6.8241 天前
理念导向编程|ts
rust·typescript
濮水大叔2 天前
AOP编程有三大场景:控制器切面,内部切面,外部切面,你get到了吗?
typescript·node.js·nestjs
朝与暮2 天前
史上最全typescript使用指南
typescript
zhangzelin8882 天前
TypeScript入门指南:JavaScript的类型化超集
前端·javascript·其他·typescript