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

TypeScript map加新属性报不存在,不改动Cat类型怎么加OriginAddedCat实现?

解决方案

我们可以通过TypeScript的交叉类型扩展原有Cat类型,不需要修改原始Cat的定义即可实现需求:

  1. 首先定义扩展后的新类型:
    type OriginAddedCat = Cat & { origin: "Italy" | "France" }
  2. 改造addOrigin函数,以下提供两种实现方案:

方案1:不可变实现(推荐,无副作用)

不修改原数组中的Cat对象,返回全新的扩展类型对象:

type Cat = { name: string; fur: "brown" | "white" };
// 新增扩展类型,不改动原有Cat定义
type OriginAddedCat = Cat & { origin: "Italy" | "France" }

const addOrigin = (animals: Cat[], origin: "Italy" | "France"): OriginAddedCat[] =>
    animals.map((animal): OriginAddedCat => ({
        ...animal,
        origin
    }));

方案2:可变实现(直接修改原对象)

如果业务场景需要直接修改原数组内的对象,可通过类型断言完成类型拓宽:

type Cat = { name: string; fur: "brown" | "white" };
type OriginAddedCat = Cat & { origin: "Italy" | "France" }

const addOrigin = (animals: Cat[], origin: "Italy" | "France"): OriginAddedCat[] =>
    animals.map((animal) => {
        const extended = animal as OriginAddedCat;
        extended.origin = origin;
        return extended;
    });

两种方案都可以解决Property 'origin' does not exist on type 'Cat'.ts(2339)的报错,方案1不会修改输入参数,更符合TypeScript类型安全的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:05