You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:22:33