我有一个代码,我有这些接口和类型定义:
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字段的引用会引发错误。我需要做出哪些改变才能正常工作?
感谢。
答案 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