【问题标题】:Generate a string array from a union type typescript从联合类型打字稿生成字符串数组
【发布时间】:2021-03-22 17:32:53
【问题描述】:

大家好,我正在寻找一种从联合打字稿类型中获取数组的方法

这是一个现有的类型:

 export type GridClassKey =
  | 'root'
  | 'container'
  | 'item'
  | 'zeroMinWidth'
  | 'direction-xs-column'
  | 'direction-xs-column-reverse'
  | 'direction-xs-row-reverse'
  | 'wrap-xs-nowrap'
  | 'wrap-xs-wrap-reverse'
  | 'align-items-xs-center'
  | 'align-items-xs-flex-start'
  | 'align-items-xs-flex-end'
  | 'align-items-xs-baseline'
  | 'align-content-xs-center'
  | 'align-content-xs-flex-start'
  | 'align-content-xs-flex-end'
  | 'align-content-xs-space-between'
  | 'align-content-xs-space-around'
  | 'justify-xs-center'
  | 'justify-xs-flex-end'
  | 'justify-xs-space-between'
  | 'justify-xs-space-around'
  | 'justify-xs-space-evenly'
  | 'spacing-xs-1'
  | 'spacing-xs-2'
  | 'spacing-xs-3'
  | 'spacing-xs-4'
  | 'spacing-xs-5'
  | 'spacing-xs-6'
  | 'spacing-xs-7'
  | 'spacing-xs-8'
  | 'spacing-xs-9'
  | 'spacing-xs-10'
  | 'grid-xs-auto'
  | 'grid-xs-true'
  | 'grid-xs-1'
  | 'grid-xs-2'
  | 'grid-xs-3'
  | 'grid-xs-4'
  | 'grid-xs-5'
  | 'grid-xs-6'
  | 'grid-xs-7'
  | 'grid-xs-8'
  | 'grid-xs-9'
  | 'grid-xs-10'
  | 'grid-xs-11'
  | 'grid-xs-12'

我想以编程方式从中获取一个真正的字符串数组,例如:

['root','container', ...]

有没有可能,因为 GridClassKey 是一个类型而不是一个值?

谢谢

【问题讨论】:

  • 不,不是,因为如果在运行时不存在类型,则无法在运行时组装数组。

标签: typescript typescript-typings


【解决方案1】:

我们无法从该类型创建一个数组,因为如果在运行时不存在类型,我们就无法在运行时组装一个数组(@Ingo Bürk 的评论)。但我们可以反过来。如果我们有一个 const 数组,我们可以为它获取一个联合类型。例如-

const gridClassKeys = ['root', 'container'] as const

// "root" | "container"
type GridClassKey = typeof gridClassKeys[number]

Playground

请注意,我们必须在声明数组时使用const assertions(数组将是只读元组,因此固定键)

【讨论】:

  • 是的,不幸的是我只有这些类型作为数据源:/太糟糕了......谢谢你的回答!
  • @Topsy 如果类型在文件中,您可以进行文件操作以检索数组。
  • 这是一个来自材料 ui 节点模块的打字稿文件 ^^ 所以我真的不想这样做。但是没关系,我手动完成了^^谢谢
  • @Topsy,是的,这不是一个好主意
猜你喜欢
  • 2018-04-28
  • 2020-06-15
  • 2017-12-28
  • 1970-01-01
  • 2020-12-10
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多