函数中的 Angular 9 类型检查返回"object"



我有一个绑定到组件输出处理程序的方法,如下所示:

<app-favorite [favorites]="screenshot.favorites" [userId]="userId" (save)="updateFavorites(screenshot)">
</app-favorite>

这里的问题是屏幕截图实际上可以是ScreenshotVideo,所以我正在尝试进行类型检查来处理它。

在我的方法中,我有这样的:

updateFavorites(model: Screenshot | Video): void {
console.log(model instanceof Screenshot);
var t = new Screenshot();
console.log(t instanceof Screenshot);
/// ****** removed for brevity ****** ///
}

第一个控制台日志输出false,第二个为true。当我添加这些控制台日志时:

console.log(model instanceof Screenshot);
console.log(model.constructor.name);
var t = new Screenshot();
console.log(t instanceof Screenshot);
console.log(t.constructor.name);

它输出:

错误

目标

真实

屏幕截图

有人能告诉我我做错了什么吗?

类型断言的一个解决方法是使用类型谓词使用类型保护。尝试以下

private isScreenshot(model: Screenshot | Video): model is Screenshot {
return (model as Screenshot).<property> !== undefined;
}

您需要将<property>占位符替换为特定于Screenshot类的属性。然后,您可以在运行时使用以下断言类型

updateFavorites(model: Screenshot | Video): void {
if (this.isScreenshot(model)) {
// do something with object of type `Screenshot`
} else {
// do something with object of type `Video`
}
}

最新更新