我想将对象映射值限制为某种类型,并能够枚举其键。
有:
const obj = {
a: 'a',
b: 'b'
}
type Obj = typeof obj
const obj2: Obj
obj2输入了a
和b
道具
但是我想限制obj道具只是字符串,我可以做
const obj: {[name: string]: string} = {
a: 'a',
b: 'b'
}
type Obj = typeof obj
const obj2: Obj
obj2现在没有任何类型的道具,只有任何索引的字符串属性,但我希望它只有a
和b
道具,但我不想这样做,显式枚举键类型(因为我可能有两个以上的a
和b
道具进行枚举):
const obj: {[name in ('a' | 'b')]: string} = {
a: 'a',
b: 'b'
}
type Obj = typeof obj
const obj2: Obj
这可以实现吗? Simplier然后是最后一段代码
答案 0 :(得分:1)
所以基本上没有。这是不可能的。我看到更合理的解决方案可以根据需要定义限制类型,并在需要时转换为索引器类型:
type Indexer = {[name: string]: string};
type Obj = {a: string, b: string};
obj: Obj = {a: 'a', b: 'b'}
// Lodash map
_.map(<Indexer> obj, (val, key) => {})
注意:强>
如果您不想使用索引器,因为它们会破坏类型安全性,那么就此问题进行公开讨论issue
如果你没有这个问题,你可以简单地定义你的类型:
type Obj = {a: string, b: string, [name: string]: string}}