繁体   English   中英

为所有可能的对象属性类型定义一个类型

[英]Define a type for all possible object property types

当我们将鼠标悬停在任意对象属性的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" "string" | "number"string | number string | number一样。 "Hello"42可以分配给后者,但不能分配给前者。

这里的混淆是typeof来自 JS 并且只返回 JavaScript 中定义的类型的字符串表示; 这与 TypeScript 完全没有关系。 TypeScript 所做的就是知道可能的值,从而返回所有这些值的类型联合,以获得最佳的类型。

所以要回答这个问题

我们如何将该列表捕获为用户定义的类型

这些类型一开始就不一样。 例如, typeof null === "object" ,因此即使是 TypeScript 类型null也必须出现在该列表中。 事实上,当 typeof 应用于该类型的变量时,可以产生这些值中的任何一个的类型列表就是any ,所以

type ObjectPropertyType = any;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM