免费高清图片素材网站有哪些,广州网站推广哪家强,主图详情页设计,设计类网站排名title: TypeScript类型体操#xff1a;获取数组中元素对象属性的值作为新类型 date: 2023-03-03 20:58:24 categories: TypeScript类型体操 tags:
TypeScript类型体操TypeScript 首先先说获取数组中元素对象属性的值作为新类型的解决方案
使用 as const 强调不可变数组使用 …
title: TypeScript类型体操获取数组中元素对象属性的值作为新类型 date: 2023-03-03 20:58:24 categories: TypeScript类型体操 tags:
TypeScript类型体操TypeScript 首先先说获取数组中元素对象属性的值作为新类型的解决方案
使用 as const 强调不可变数组使用 typeof arr 获取数组类型使用 [number] 获取数组元素对象类型这是关键[number]表示获取数组对象元素类型数组对象的 key 是 number 类型最后指定元素属性 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] 是符合要求的JavaScript 的 number 类型索引一般是用户通过 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