typescript - 多个类型

时间:2018-01-27 18:19:12

标签: angular typescript

我有一个代码,我有这些接口和类型定义:

export interface ReportItem {
    title: string;
    earnings: number;
}

export interface CustomError {
    errorRaw: any;
}

export type SalesReport = ReportItem[];

然后我有一个接受参数的方法,该参数可以是SalesReport类型,但也可能是CustomError

public getReport(data: SalesReport | CustomError) {
   if ('errorRaw' in data) {
       data.errorRaw // error
   }
}    

数据中对errorRaw字段的引用会引发错误。我需要做出哪些改变才能正常工作?

感谢。

1 个答案:

答案 0 :(得分:1)

你正在寻找一个“缩小”你的界面的类型后卫。

function isCustomErro(x: any): x is CustomError {
  return x.hasOwnProperty('errorRaw');
}

然后,您getReport方法将如下所示:

public getReport(data: SalesReport | CustomError) {
  if (isCustomError(data)) {
   throw new Error(data.errorRaw)
  }
}

在此处阅读有关类型保护和缩小界面的更多信息:https://medium.com/@OlegVaraksin/narrow-interfaces-in-typescript-5dadbce7b463