在打字稿中,对于一个对象,我可以将其键限制在指定范围内,将值限制在指定范围内。我可以将某个键的类型限制为某个值吗?
比如说我有这个
interface ValueType1 {
key1: string,
key2: string,
}
interface ValueType2 {
key3: number,
key4: number,
}
type KeyType = 'value1' | 'value2';
const map: {[key in KeyType]: ValueType1 | ValueType2} = {
'value1': {
key1: '123',
key2: '123'
},
'value2': {
key3: 123,
key4: 123,
}
}
如果我想限制key = 'value1'时,Value的类型必须是ValueType1,value2也是如此。这可能吗?
直接映射按键和类型即可。另外,我建议在大多数情况下使用
as const satisfies
,因为它会给你更精确/更窄的类型,这可能会在以后带来好处:
type ValueMap = {
value1: ValueType1,
value2: ValueType2
}
const map: ValueMap = {
'value1': {
key1: '123',
key2: '123'
},
'value2': {
key3: 123,
key4: 123,
}
}
const constMap = {
'value1': {
key1: '123',
key2: '123'
},
'value2': {
key3: 123,
key4: 123,
}
} as const satisfies ValueMap