TypeScript类型体操:获取数组中元素对象属性的值作为新类型
创始人
2024-05-28 11:50:31
0

title: TypeScript类型体操:获取数组中元素对象属性的值作为新类型
date: 2023-03-03 20:58:24
categories: TypeScript类型体操
tags:

  • TypeScript类型体操
  • TypeScript

首先先说获取数组中元素对象属性的值作为新类型的解决方案

  • 使用 as const 强调不可变数组
  • 使用 typeof arr 获取数组类型
  • 使用 [number] 获取数组元素对象类型,这是关键![number]表示获取数组对象元素类型,数组对象的 keynumber 类型
  • 最后指定元素属性 key 即可
const arr = [{key: 'update',},{key: 'delete'}
]

特别的需要指定 update, delete 作为某一个类型提示

// 'delete' | 'update'
type OperationalKey = (typeof arr)[number]['key']

tips: 如果遇到不可变数组与可变数组的冲突,你可以选择保留可变数组,并使用解构获得新变量作为 as const

const iArr = [...arr] as const;
type OperationalKey = (typeof iArr)[number]['key']

详细介绍

遇到一个比较麻烦的问题,个人在项目中使用 TypeScript + Vue 的技术栈,当前的需求是给一个 Action 定义类型以获得类型提示,而这个 Action 内部有一个 key 属性,key 是一个字符串但是我希望仅限于某几个字符串。

const actions = [{key: 'add',...},{key: 'delete',},{key: 'update'}
]const onAction = (action: {key: string}) => {}

很明显,当我们直接使用 string 作为 key 的类型,我们只能具体看代码有哪些操作符,如果直接在 action: {key: type} 中重新写一遍字符串类型势必麻烦且不好维护,所以如何获取 actions 数组中元素对象的属性的值作为新类型就是我们要解决的问题。

对于一个对象,我们可以使用 keyof 来取出所有的属性并作为新类型返回,但是我们需要的是属性的值作为新类型,所以某一步操作必然是 ['key']

反过来看数组,如何获取数组元素类型?在经过一番查找后,发现使用 [number] 是符合要求的,JavaScriptnumber 类型索引一般是用户通过 push, unshift 等其他操作加入的数组,这么解释也许不正确,因为JavaScript数组是一个对象,而 JavaScript 的对象的 key 是字符串,详细可以看看 Array - JavaScript | MDN (mozilla.org),总的来说,通过非负数字访问数组是我们需要的结果,所以[number] 没有任何问题。

可以获取数组元素对象类型后,还必须要注意一点,数组必须是不可变的,通常用 as const 来修饰,如果数组可变,那么相关元素属性就可变便无法正确获取。

更好的解决方案

通常为了避免魔法数字,魔法字符串,也就是很难理解含义的一系列定义,我们会定义一些常量集合来确定,但有些时候觉得麻烦便可使用上述方法来确定类型。

其他

  • typescript 如何从数组的项中获取某个值作为类型? - SegmentFault 思否
  • TypeScript 类型体操:获取数组中元素对象属性的值作为新类型 | Az’s Blog (azin-cn.github.io)
  • TypeScript 类型体操:获取数组中元素对象属性的值作为新类型 | 一抹阳光& - CSDN

相关内容

热门资讯

一处美丽的自然景观作文四年级... 一处美丽的自然景观作文四年级85篇 篇一大自然给人类带来了无尽的美景,其中有一处我觉得最美丽的自然景...
关于描写妈妈的作文400字四... 关于描写妈妈的作文400字四年级 篇一妈妈是我最敬爱的人,她是一个温柔而又坚强的女人。她总是默默地为...
四年级作文小小动物园600字... 四年级作文小小动物园600字 篇一小小动物园的一天今天,我和同学们来到了小小动物园,我们都非常兴奋。...
春天来了四年级作文300字【... 春天来了四年级作文300字 篇一春天的脚步渐渐地临近了,大地一片生机勃勃。我喜欢春天,因为春天里有温...
我的心愿四年级100字作文怎... 篇一:我的心愿四年级100字作文怎么写42篇第一篇内容:我希望成为一名优秀的画家我是一个喜欢画画的孩...
感动的事四年级作文300字【... 感动的事四年级作文300字 篇一我的小伙伴我有一个特别好的小伙伴,他叫小明。他是一个非常善良和乐于助...
回乡偶书【优选4篇】 回乡偶书 篇一 回乡偶书 篇二回乡偶书 篇三 重庆市忠县实验小学四年级二班:申晓航         ...
想象四年级作文400字(精简... 想象四年级作文400字 篇一我的未来世界我是一位四年级的学生,我有一个梦想,那就是拥有一个充满科技和...
四年级作文【精彩6篇】 四年级作文 篇一我喜欢的动物我喜欢的动物是小狗。小狗是一种可爱的动物,它们有着憨态可掬的外表和忠诚的...
四年级描写北京故宫的作文40... 四年级描写北京故宫的作文400字 篇一北京故宫是我国古代宫殿建筑的代表之一,它位于北京市中心,是中国...
四年级作文我的暑生活(通用6... 四年级作文我的暑生活 篇一我的暑假生活充满了欢乐和收获。这个暑假,我参加了许多有趣的活动,学到了很多...
玫瑰花和小雨珠四年级作文【通... 玫瑰花和小雨珠四年级作文 篇一玫瑰花和小雨珠我有一个好朋友,她叫小雨珠。她是我们班的班花,而我则是班...
我我快乐300字四年级作文8... 我快乐300字四年级作文 篇一我快乐的一天今天是我快乐的一天。早上我起床后,妈妈给我做了我最喜欢吃的...
我们这美丽的校园四年级作文(... 我们这美丽的校园四年级作文 篇一我热爱我的校园,因为它是如此美丽。每天早上,当我走进校园时,我都被各...
古老而神秘的海神庙四年级作文... 古老而神秘的海神庙四年级作文 篇一海神庙是一座古老而神秘的庙宇,位于一个小岛上。我和我的家人去参观了...
小书迷四年级作文【推荐6篇】 小书迷四年级作文 篇一看见书,我就忍不住心里狂喜。那是一种浓郁的书香,让我仿佛置身于一个神奇的世界。...
五一劳动节四年级作文(精选6... 五一劳动节四年级作文 篇一五一劳动节是每年的五月一日,也是我们最期待的假期之一。这个节日是为了表彰劳...
四年级写我的动物朋友的作文第... 四年级写我的动物朋友的作文第四单元 篇一我的宠物狗我家养了一只非常可爱的宠物狗,它的名字叫小黑。小黑...
热爱生命四年级作文【优秀6篇... 热爱生命四年级作文 篇一热爱生命生命是最宝贵的财富,我们每个人都应该热爱生命。生命只有一次,我们要珍...
以我发现了为题的作文【优选3... 以我发现了为题的作文 篇一我发现了一片神奇的花海今天,我偶然发现了一片令人惊叹的花海,仿佛置身于童话...