• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

TypeScript-索引访问操作符

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • 通过 [] 索引类型访问操作符, 我们就能得到某个索引的类型

class Person {
    name: string;
    age: number;
}

type MyType = Person['name'];

验证方式为,按住键盘的 ctrl 键 + 鼠标左键然后放到 MyType 上方即可。

博主假设有这么一个需求: 获取指定对象, 部分属性的值, 放到数组中返回:

首先在来演变过程也就是说先不给出最终完整的代码:

let obj = {
    name: 'BNTang',
    age: 18,
    gender: true
}

function getValues<T, K extends keyof T>(obj: T, keys: K[]) {
    let arr = [];
    keys.forEach(key => {
        arr.push(obj[key]);
    });
    return arr;
}

let res = getValues(obj, ['name', 'age']);
console.log(res);

运行效果如下发现是可以进行实现的,但是还是有问题:

如上的函数我是没有指定具体的返回的数据类型的,如果要指定返回的数据类型,那么就可能是 string、number、boolean、那么这个时候就可以利用 索引类型访问操作符 来进行解决该问题最终代码如下:

let obj = {
    name: 'BNTang',
    age: 18,
    gender: true
}

function getValues<T, K extends keyof T>(obj: T, keys: K[]): T[K][] {
    let arr = [] as T[K][];
    keys.forEach(key => {
        arr.push(obj[key]);
    })
    return arr;
}

let res = getValues(obj, ['name', 'age']);
console.log(res);

通过索引类型访问操作符解决该问题其实它内部就是自动转换为了联合,例如我现在返回的既有 string、又有 number 那么返回值类型就自动转换为了 (string | number)[],验证方式为,按住键盘的 ctrl 键 + 鼠标左键然后放到 res 上方即可。

索引访问操作符注意点

  • 不会返回 null/undefined/never 类型
interface TestInterface {
    a: string,
    b: number,
    c: boolean,
    d: symbol,
    e: null,
    f: undefined,
    g: never
}

type MyType = TestInterface[keyof TestInterface];

验证方式为,按住键盘的 ctrl 键 + 鼠标左键然后放到 MyType 上方即可。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
TypeScript - Classes发布时间:2022-07-18
下一篇:
typeScript中函数声明以及函数表达式发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap