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

TypeScript如何使用对象子字段作为另一个对象的键?

实现用foo对象的path字段作为新对象的键类型

要实现这个需求,核心是让TypeScript准确识别foo中path字段的具体字面量值,再以此作为新对象的键类型,具体步骤如下:

  1. 锁定foo的字面量类型
    默认情况下,TypeScript会把foo里的path字段推断为string类型,无法获取具体字符串值。需要用as const断言让TypeScript保留每个path的字面量类型:
const foo = {
    key1: {
        path: 'hello'
    },
    key2: {
        path: 'world'
    },
    key3: {
        path: 'smile'
    }
} as const;
  1. 定义新对象的键类型
    通过索引类型查询,提取所有path字段的联合类型,作为bar的键类型:
// 先提取所有path的联合类型(可选,也可以直接内联到类型定义中)
type FooPathKeys = typeof foo[keyof typeof foo]['path'];

const bar: { [Key in FooPathKeys]: number } = {
    hello: 1,
    world: 2,
    smile: 3
};

也可以直接把类型逻辑写在对象类型里,省略单独定义类型的步骤:

const bar: { [Key in typeof foo[keyof typeof foo]['path']]: number } = {
    hello: 1,
    world: 2,
    smile: 3
};

这样定义后,bar的键只能是hello、world、smile这三个值,TypeScript会对不符合的键名或缺失的键进行类型校验,保证类型安全。

内容的提问来源于stack exchange,提问作者damjuve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:07:35