为什么 Angular 中的 NgForOf 指令不能与联合类型一起使用?

dis*_*ame 8 javascript typescript angular

在我的组件中,我定义了一个属性数组,如下所示:

array: number[] | string[] = ['1', '2'];
Run Code Online (Sandbox Code Playgroud)

在模板中,我使用 ngFor 迭代该数组的元素:

<div *ngFor="let element of array">
  {{element}}
</div>
Run Code Online (Sandbox Code Playgroud)

但编译器抛出这个错误:

error TS2322:
Type 'number[] | string[]' is not assignable to
type '(number[] & NgIterable<number>) | null | undefined'.
Run Code Online (Sandbox Code Playgroud)

array我不明白 Angular 如何以及为何推断出这种情况下的属性类型number[] & NgIterable<number>

$any()我知道我可以通过在模板内部使用或将angularCompilerOptions.strictTemplates内部设置tsconfig.json为 来消除错误false,但如果没有必要,我想避免这样做。

我也不喜欢将属性类型更改array为的想法(number | string)[],因为这是错误的,我array只想包含数字或字符串。

Eli*_*seo 1

您可以创建一个 getter 来“转换”您的数组

  get castArray()
  {
    return this.array as NgIterable<number|string>
  }
Run Code Online (Sandbox Code Playgroud)

castArray并在 *ngFor 中使用

<div *ngFor="let element of castArray">
   {{element}}
</div>
Run Code Online (Sandbox Code Playgroud)

但我真的觉得这是一种“丑陋”的做法。