【问题标题】:Typescript map string literal types to uppercase打字稿将字符串文字类型映射为大写
【发布时间】:2020-10-16 06:47:03
【问题描述】:
type a = 'one' | 'two'

我想要type b 喜欢

type b = 'ONE' | 'TWO'

所以我尝试了

type a = 'one' | 'two'
type b = {[P in a]: P['toUpperCase']}

但这并不能达到我想要的效果。

感谢您的阅读:)

【问题讨论】:

  • 如果可能的话,我会印象深刻。但我怀疑它可能不是。
  • 不,类型系统中没有字符串操作。
  • 我能想到的唯一解决方案是将此type a = 'one' | 'two' 存储在单独的文件中并读取文件内容,然后以编程方式将值更改为大写。
  • @IAMTHEBEST 我想它可以工作,但看起来有点难看。您可能能够进行某种类型的构建步骤来转换类型,比如从lowercase.d.ts 获取所有内容并生成一个uppercase.d.ts,其中所有字符串文字类型都为大写。但我不确定我是否真的喜欢这个。如果您需要首先将其大写或其他任何偏离的内容,似乎很容易与此紧密结合。
  • @VLAZ 是的,这对我来说似乎有点像。如果有人可以写一个回答“不”的答案,我会批准它????

标签: javascript typescript types type-conversion typescript-typings


【解决方案1】:

您现在可以在即将发布的 4.1 版本中执行此操作,并引入了Template Literal Types

type A = 'one' | 'two'
type B = `${Uppercase<A>}`

let b: B = 'one' // Type '"one"' is not assignable to type '"ONE" | "TWO"'.

TS Playground

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-11-19
  • 2020-06-07
  • 2022-01-06
  • 2021-12-10
  • 2022-12-07
  • 2018-04-28
  • 2022-08-17
  • 2019-06-05
相关资源
最近更新 更多