首页 > 解决方案 > 联合上不存在类型中的专用属性

问题描述

首先看一下代码

type TBasedInfo = {
  name: 'getBasedQuery';
  params: {
    market: string;
    items: string;
    year?: string;
  };
};

type TGetShopDetail = {
  name: 'getShopDetail';
  params: {
    market: string;
    items: string;
    shopName: string;
    year?: string;
  };
};

type TGetCarDetail = {
  name: 'getCarDetail';
  params: {
    market: string;
    items: string;
    car: string;
    year?: string;
  };
};

type TMsRequest = TGetCarDetail | TGetShopDetail | TBasedInfo;

function getRequest(request: TMsRequest) {
  switch (request['name']) {
    case 'getShopDetail':
      const { shopName } = request['params'];
      console.log(shopName);
    case 'getCarDetail':
      const { car } = request['params'];
      console.log(car);
  }
}

我得到了错误Property 'car' does not exist on type '{ market: string; items: string; shopName: string; year?: string; } | { market: string; items: string; car: string; year?: string; }'.ts(2339),这是 type 的专用字段TGetCarDetail。但是这个问题并没有发生在另一个专门的领域shopName

大家能分享一下你的想法,以及在这种情况下如何解决。

标签: typescript

解决方案


推荐阅读