【发布时间】:2020-08-15 15:56:29
【问题描述】:
在打字稿中给出以下输入:
type InputObjectType = {
a: string
b: number
c: {}
}
我怎样才能得到以下类型:
type ObjectKeysArrayType = ['a', 'b', 'c']
到目前为止,我只能做到:
type AllPossibleKeys = (keyof InputObjectType)[]
这给了我["a" | "b" | "c"],这很接近,但在这种情况下不是我想要的。
我需要一个始终包含给定类型对象中所有键字符串的数组。我知道强制执行此操作的唯一方法,例如,当用户向对象添加新键时,该键也添加到数组中时,就是通过类似这样的方法。
【问题讨论】:
-
InputObject是类型还是对象?名称说明一件事,而代码说明另一件事。 -
我已经更新了代码,它应该是一个类型。
-
好的,现在你能解释一下这样的 String Array Literal 类型会有什么用吗?因为也许根本问题是您应该问的问题。类型在输出中被擦除,因此它们的唯一用途是用于静态类型检查,或构造其他类型以进行静态类型检查。在后一种情况下,
keyof InputObjectType就是您所需要的。否则,这似乎是一个没有目的的抽象练习,并且可能不属于 SO。 换句话说,假设你问的是不可能的,我认为不可能。向 Typescript 的人说明为什么应该这样做。 -
另外,请将标题更改为与问题一致,或相反。
-
你所拥有的应该可以工作(尽管我使用的是 v3.9)。当我执行相同的步骤时,我会得到
("a"|"b"|"c")[],我相信这正是您想要的。相反,如果您想要一个动态包含所有这些值的数组,我认为这是不可能的,因为该类型在运行时不存在。
标签: typescript