You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:55:08