Angular中如何在@if中用模板变量实现类型收窄?
Angular信号模板中类型收窄的模板变量替代方案
在Angular中,仅当将this.signal().object?.nestedObject赋值给类内变量时,类型收窄才能正常生效。直接在模板中多次调用信号表达式的话,类型收窄不会起作用。
类型收窄无效示例
@if(isTypeA(this.signal().object?.nestedObject)) { {{ this.signal().object?.nestedObject.TypeAUniqueProperty }} } @else if (isTypeB(this.signal().object?.nestedObject)){ {{ this.signal().object?.nestedObject.TypeBUniqueProperty }} }
类型收窄生效示例
@if(isTypeA(variable)) { {{ variable.TypeAUniqueProperty }} } @else if (isTypeB(variable)){ {{ variable.TypeBUniqueProperty }} }
疑问
能否像旧版*ngIf那样,在Angular模板中将this.signal().object?.nestedObject直接赋值为模板变量?这样就无需在类中额外定义变量。
当前可行方案(更新)
目前只能通过在外层嵌套@if语句实现该需求,利用@if的变量绑定语法将信号表达式赋值为模板变量,后续的类型收窄判断即可正常生效:
@if(this.signal().object?.nestedObject; as templateVariable) { @if(isTypeA(templateVariable)) { {{ templateVariable.TypeAUniqueProperty }} } @else if (isTypeB(templateVariable)){ {{ templateVariable.TypeBUniqueProperty }} } }
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

