是否可以将某个键的类型限制为某个值?

问题描述 投票:0回答:1

在打字稿中,对于一个对象,我可以将其键限制在指定范围内,将值限制在指定范围内。我可以将某个键的类型限制为某个值吗?

比如说我有这个

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也是如此。这可能吗?

typescript syntactic-sugar
1个回答
0
投票

直接映射按键和类型即可。另外,我建议在大多数情况下使用

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
© www.soinside.com 2019 - 2024. All rights reserved.