typescript - 如何键入映射到对象的字符串数组,其中键及其值是数组值
问题描述
这是我想要实现的目标
function Enum<T extends string>(arr: T[]): Record<T, T> {
return arr.reduce((next, key, index) => {
next[key] = key
return next
}, {} as Record<T, T>)
}
const Codes = Enum([
'foo',
'bar'
])
我想让打字稿知道 Codes.foo 只是'foo'。现在它认为它可以是'foo' | '酒吧'
我知道枚举。这更像是一个好奇的问题。
解决方案
您应该使用{ [K in T]: K }
而不是Record<T, T>
告诉打字稿键实际上是值:
function Enum<T extends string>(o: T[]) {
return o.reduce((next, key) => {
next[key] = key;
return next;
}, {} as {[K in T]: K});
}
推荐阅读
- r - 如何让 R 文件启动?
- javascript - 我有一些按钮,我需要在点击时将一个红色变为红色,而旧的红色按钮变为灰色,我该怎么做?
- python - 如何将查询返回的序言列表存储在python中?
- break - FORESTPLOT 包中的 X 轴中断
- hadoop - HDFS + lsof + 如何查找每个 HDFS 文件夹当前正在使用的文件
- codenameone - 更改无限容器的布局
- android - 模型对象与数据库结果不匹配
- javascript - 响应 fetch API 请求区分重定向/JSON 数据
- python - 如何解决 Matplotlib 中的锯齿状网格?
- deep-learning - 服务器上进程的CPU使用率