首页 > 解决方案 > 为所有可能的对象属性类型定义一个类型

问题描述

当我们将鼠标悬停在typeof任意对象属性上时,我们会看到可能的类型列表:

"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"

在此处输入图像描述

我们如何才能将该列表捕获为用户定义的type,而无需像这样对每个列表进行硬编码:

type ObjectPropertyType =
    string |
    number |
    bigint |
    boolean |
    symbol |
    undefined |
    object |
    Function;

标签: typescript

解决方案


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;

推荐阅读