当我们将鼠标悬停在typeof
上以获取任意对象属性时,我们会看到可能的类型列表:
"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
我们如何将列表捕获为用户定义的type
,而不必像这样对每个列表进行硬编码:
type ObjectPropertyType =
string |
number |
bigint |
boolean |
symbol |
undefined |
object |
Function;
答案 0 :(得分:2)
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;