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

如何在TypeScript单个类型中使用两个映射类型?

实现合并多接口映射类型的替代方案

已知你定义了两个接口:

interface A {
    a: boolean;
    b: boolean;
}

interface X {
    x: number[];
}

想要创建OneType将A的所有键映射为number,X的所有键映射为string,直接在单个类型字面量里写两个映射类型的语法确实不被TypeScript支持。除了拆分映射类型再交叉的方式,还有两种更简洁的实现方法:

方法一:内联映射类型+交叉类型

不用单独定义中间映射类型,直接把两个映射逻辑写在交叉类型里:

type OneType = { [K in keyof A]: number } & { [K in keyof X]: string };

const map: OneType = {
    a: 22,
    b: 223,
    x: '343'
};

方法二:联合键+条件类型

把A和X的键合并成联合类型,再通过条件判断为不同键分配对应类型:

type OneType = {
    [K in keyof A | keyof X]: K extends keyof A ? number : string;
};

const map: OneType = {
    a: 22,
    b: 223,
    x: '343'
};

补充说明

TypeScript不允许在单个对象类型字面量中存在多个映射类型条目,这就是你直接写两个[key in ...]语法失效的原因。上面两种方法本质上都是绕开这个限制:要么把多个映射拆成独立类型再交叉,要么把所有键合并后用条件类型分支处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:45:48