typescript - 为所有可能的对象属性类型定义一个类型
问题描述
当我们将鼠标悬停在typeof
任意对象属性上时,我们会看到可能的类型列表:
"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
我们如何才能将该列表捕获为用户定义的type
,而无需像这样对每个列表进行硬编码:
type ObjectPropertyType =
string |
number |
bigint |
boolean |
symbol |
undefined |
object |
Function;
解决方案
typeof
是一个 JavaScript 内置函数,它以字符串(!)的形式返回(运行时!)类型的变量。Typescript 类型与此完全不同,它们只是具有相同的名称,因为 TypeScript 在这里被设计为接近 JavaScript。
特别是种类"string" | "number"
和string | number
不一样。值"Hello"
和42
可以分配给后者,但不能分配给前者。
这里的混乱typeof
来自 JS,只返回 JavaScript 中定义的类型的字符串表示;这与 TypeScript 完全无关。TypeScript 所做的只是知道可能的值,因此返回所有这些值的类型联合,以获得最佳的类型。
所以回答这个问题
我们如何将该列表捕获为用户定义的类型
这些类型一开始就不一样。例如,typeof null === "object"
, 所以即使是 TypeScript 类型null
也必须出现在该列表中。事实上,当 typeof 应用于该类型的变量时,可以产生任何这些值的类型列表很简单any
,所以
type ObjectPropertyType = any;
推荐阅读
- typescript - Sinon - spy not being called but test enters into the function
- sql - 下面的 SQL 有什么问题(如果有的话)?(拥有和分组)
- strapi - Strapi 中用户模型的自定义验证消息
- android - Unity Android:检测到发生了新更新
- python - Python - 使用随机模块为您提供 [0.0, 1.0) 范围内的值,将其相乘,然后四舍五入
- javascript - Ng-Bind Affecting Table Head
- wpf - 全屏模式
- python - 如何在 shell 中 su 和运行 python 脚本?
- javascript - JS OR operator not working with v-bind Vue.js
- kubernetes - 向 statefulSet 添加额外的 volumeClaimTemplate