首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >房地产“市场”不存在于{市场:[市场];}的类型上

房地产“市场”不存在于{市场:[市场];}的类型上
EN

Stack Overflow用户
提问于 2018-08-14 16:39:41
回答 1查看 96关注 0票数 1

当我试图访问action.payload.markets时,它给了我编译时错误:

“{ market: Market;}而论市场:市场;}\{ error: any;}‘”类型不存在“Property’Market”。“{ market: Market;}”类型不存在房地产市场。

这是我正在使用的代码。

market.actions.ts

代码语言:javascript
复制
export class LoadMarket implements Action {
  readonly type = MarketActionTypes.LoadMarket;
  constructor(public payload: {markets: [Market]}) {}
}

export class UpdateMarket implements Action {
  readonly type = MarketActionTypes.UpdateMarket;
  constructor(public payload: {market: Market}) {}
}
export class LoadMarketFailure implements Action {
  readonly type = MarketActionTypes.LoadMarketFailure;
  constructor(public payload: {error: any}) {}
}

export type MarketActions =
  | LoadMarket
  | UpdateMarket
  | LoadMarketFailure;

market.reducers.ts

代码语言:javascript
复制
export function marketReducer(state = initialState, action: MarketActions): MarketState {
  switch (action.type) {   
    case MarketActionTypes.LoadMarket: {
      return {
        ...state,
        markets: action.payload.markets, // this is giving compile time error.  Property 'markets' does not exist on type '{ markets: [Market]; } | { market: Market; } | { error: any; }'. Property 'markets' does not exist on type '{ market: Market; }'.
        error: null
      };
    }
    default: {
      return state;
    }
  }
}

这是一个截图:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 16:44:21

看起来您的有效载荷可以是三种类型之一:

  • { markets: [Market]; }
  • { market: [Market]; }
  • { error: any }

编译器警告您,它可能不是您假设的类型(第一个类型)。

您应该通过缩小类型来处理这个问题,这可以通过类型断言来完成。

例如自定义类型保护-您可能需要一个更深的检查比这..。

代码语言:javascript
复制
function hasMarkets(input: MyUnionType): input is { markets: [Market]; } {
    return (!!(<any>input).markets); 
}

下面是一个没有,然后使用自定义类型保护的示例:

代码语言:javascript
复制
const val1 = example.markets; // No

if (hasMarkets(example)) {
    const val2 = example.markets; // Yes
}

当您使用类型保护时,如果您有一个类型,那么ifelse中的所有内容都会缩小(在您的示例中,other语句将是另外两种类型的联合)。您还可以在其他条件语句中使用类型保护,而不仅仅是ifs。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51846120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档