angular - 函数中的 Angular 9 类型检查返回“对象”
问题描述
我有这个方法,我已经绑定到这样的组件输出处理程序:
<app-favorite [favorites]="screenshot.favorites" [userId]="userId" (save)="updateFavorites(screenshot)">
</app-favorite>
这里的问题是屏幕截图实际上可以是 aScreenshot
或 a Video
,所以我正在尝试进行类型检查来处理它。
在我的方法中,我有这个:
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`
}
}
推荐阅读
- git - git push 失败 - 权限被拒绝(公钥)
- node.js - 找不到NodeJS的功能?
- php - 将单击的按钮(不是表单中的按钮)的变量值传递给ajax url?
- sql - 我需要创建一个字段,它是 maxdate 的第二个日期
- python - Python - 概率
- sql-server - Azure 数据资源管理器 - 用于存储对象属性/配置的解决方案
- azure - 使用其 REST API 将 Azure DevOps 指标导入 Elatic Search 数据库?
- ios - macOS 中的 xcrun 无效的活动开发者路径错误
- python - 使用 pydata_google_auth 时 Python SSL 错误握手错误
- python - AttributeError:“矩形”对象没有属性“norm_hist”-python