【发布时间】:2021-04-16 07:25:29
【问题描述】:
我有一个将业务对象作为输入的组件。在此组件的模板中,我想通过检查仅存在于业务对象的某些子类上的属性的值来有条件地呈现某些内容。
export class Thing { public foo: string; }
export class SubThing extends Thing { public bar: number; }
// ...
export class MyComponent {
@Input() thing: Thing;
}
<!-- template file -->
{{ thing.foo }}
<div *ngIf="thing?.bar > 10">Conditional content...</div>
因为编译器对模板中的类型检查不是很严格,所以它以前写的那样工作。最近这开始与 AOT 编译器发生冲突(不确定具体是什么时候),因为严格来说,当编译器认为 thing 只是一个 Thing 时,thing?.bar 是无效的,并且不能确定它是一个 @ 987654326@.
我想说*ngIf="thing instanceof SubThing && thing?.bar > 10" 之类的话,但我不能在模板本身中使用instanceof。有没有其他方法可以从模板中检查thing 的类型,以便编译器停止抱怨? (我通过将我的输入指定为any 使构建再次工作,但如果可能的话,我当然希望我的类型检查回来。)
【问题讨论】:
标签: angular typescript