我还不太熟悉TypeScript在幕后是如何工作的,所以我想知道是否有人可以让我知道这是否可行,如果不可行,为什么会这样。
我的目标基本上是使用普通JavaScript函数“生成”类型。显然,你不能将函数应用于类型,所以我开始寻找某种构造来实现类似的结果。
const lower = ['a', 'b', 'c'] as const
/**
* The goal is to generate a "mapping" type equivalent to { 'a': 'A', 'b': 'B', 'c': 'C' }
* such that, for example, Upper['a'] => 'A'
*/
type Upper = {
[c in typeof lower[number]]: c.toUpperCase() // obviously doesn't work
}
我最初试图看看TS是否允许我定义一个“仅编译时函数”,但是什么也没找到;我假设这是编译器执行任意函数的限制。
除了在上面的例子中手工编写Map之外,还有其他的选择吗?如果没有,是什么阻止了TS允许我们定义编译时转换?
1条答案
按热度按时间jutyujz01#
虽然不能将普通的JS函数应用于TS类型,但可以应用通用的helper类型,例如
Uppercase<>
:Playground
in the handbook列出了其他字符串常量通用帮助器。