TypeScript中能否为对象特定键指定对应值类型?
为TypeScript对象的特定键指定对应值类型的实现方法
完全可以实现这个需求,核心是定义键与值类型一一对应的精确类型,而非让所有键共享同一组可选值类型。下面提供两种常用实现方式:
方法1:直接定义精确类型别名
如果键的数量较少且固定,直接声明类型别名,明确每个键对应的具体值类型即可:
interface ValueType1 { key1: string; key2: string; } interface ValueType2 { key3: number; key4: number; } // 定义键与值类型严格对应的类型 type ExactMap = { value1: ValueType1; value2: ValueType2; }; // TypeScript会严格检查每个键的值类型 const map: ExactMap = { 'value1': { key1: '123', key2: '123' }, 'value2': { key3: 123, key4: 123, } };
方法2:通过键值映射实现动态类型
如果键和对应值类型的关系需要复用或扩展,可先定义键到值类型的映射,再通过映射类型生成最终结构:
interface ValueType1 { key1: string; key2: string; } interface ValueType2 { key3: number; key4: number; } // 先定义键与值类型的对应关系 type KeyToValueType = { value1: ValueType1; value2: ValueType2; }; // 基于映射关系生成精确类型 type DynamicExactMap = { [K in keyof KeyToValueType]: KeyToValueType[K]; }; const map2: DynamicExactMap = { 'value1': { key1: '456', key2: '456' }, 'value2': { key3: 456, key4: 456, } };
效果验证
若尝试给value1赋值ValueType2结构,或给value2赋值ValueType1结构,TypeScript会立即抛出类型错误,完全满足“特定键对应特定值类型”的需求。
内容的提问来源于stack exchange,提问作者Cody Z
相关产品推荐
相关产品推荐

