打字稿将字符串文字类型映射为大写

Max*_*lan 6 javascript types type-conversion typescript typescript-typings

type a = 'one' | 'two'
Run Code Online (Sandbox Code Playgroud)

我想要一个type b

type b = 'ONE' | 'TWO'
Run Code Online (Sandbox Code Playgroud)

所以我试过了

type a = 'one' | 'two'
type b = {[P in a]: P['toUpperCase']}
Run Code Online (Sandbox Code Playgroud)

但这并不能做我想要它做的事情。

感谢您阅读:)

Der*_*yen 9

您现在可以在即将发布的 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"'.
Run Code Online (Sandbox Code Playgroud)

TS游乐场

  • 在 v4.2 版本中,它切换回 OP 最初编写的方式 (3认同)
  • v4.1.0 beta 的语法略有变化,现在是“{uppercase A}”。https://www.typescriptlang.org/play?ts=4.1.0-beta#code/C4TwDgpgBAglC8UDkB7AdhJUA+zgHcUkAoUSKAIQSgAMASAbwFcxIAnaYwEMBnaGAL41ixADYRgUAEYAuStSQB5AHIBRElIXpMxTYiQAVAOqKNCgkSA (2认同)

Lor*_*ice 5

这里有TS Playground的链接

这里是代码:

type A = 'one' | 'two'
type B = Uppercase<A>

let b: B = 'one' // Error
Run Code Online (Sandbox Code Playgroud)

PS我不明白为什么在之前的评论中使用了更复杂的形式来写同样的东西

编辑:Derek Nguyen(最佳答案)现在已经用更新、更简单的解决方案改变了他的答案。