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

Angular 17新控制流语法如何实现类型断言变量存储?

Angular新控制流@if()实现类型断言变量绑定

我们常用*ngIf="assertType(item) as renamedItem"这种技巧,在模板里通过类型断言函数给变量指定类型,旧写法示例如下:

旧写法(*ngIf)

模板代码:

<ng-template
    gridCellTemplate
    let-item
>
    <ng-container *ngIf="assertType(item) as typedItem">
    <!-- 此处typedItem类型为ITEM_TYPE -->
    ...
    </ng-container>
</ng-template>

对应的TypeScript断言函数:

public assertType(item: any): ITEM_TYPE {
    return item;
}

新写法(@if控制流)

完全可以用Angular新的@if()控制流语法实现相同功能,写法更简洁:

模板代码:

<ng-template gridCellTemplate let-item>
  @if (assertType(item) as typedItem) {
    <!-- 此处typedItem自动推导为ITEM_TYPE类型,可直接使用 -->
    ...
  }
</ng-template>

TypeScript断言函数无需修改,和上面的代码一致。

这种写法逻辑和旧版完全相同:通过as关键字将断言函数返回的结果绑定到新变量,同时Angular会根据函数的返回值类型自动识别typedItem的类型,在模板编辑时能获得完整的类型提示。

内容的提问来源于stack exchange,提问作者Ch3micaL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:08