Angular 12 - 不可分配给类型 '[number, number]

Angular 12 - is not assignable to type '[number, number]

我正在 Angular 12 中试用 ngx-charts 库,但我一直遇到这个问题:

Type 'any[]' is not assignable to type '[number, number]'.

Target requires 2 element(s) but source may have fewer.

我不知道这个错误是什么意思。

代码如下:

HTML:

<ngx-charts-linear-gauge 
  [view]="view" 
  [scheme]="colorScheme" 
  [value]="value" 
  [previousValue]="previousValue" 
  (select)="onSelect($event)" 
  [units]="units"
>
</ngx-charts-linear-gauge>

ts:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {

  single: any[];
  view: any[] = [400, 400];
  colorScheme = {
    domain: ['#aae3f5']
  };
  value: number = 43;
  previousValue: number = 70;
  units: string = 'counts';

  onSelect(event) {
    console.log(event);
  }

}

关于错误含义的任何想法,如何解决这个问题?

ts 配置代码为:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "forceConsistentCasingInFileNames": true,
    "strict": false,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2017",
    "module": "es2020",
    "lib": [
      "es2018",
      "dom"
    ]
  },
  "angularCompilerOptions": {
    "enableI18nLegacyMessageIdFormat": false,
    "strictInjectionParameters": true,
    "strictInputAccessModifiers": true,
    "strictTemplates": true
  }
}

我想问题出在你的类型 view 属性 上。根据代码,它必须是 number[] 类型:doc-ref
注意:文档中的类型不够准确。 view 未定义为数字数组 (number[]),而是定义为 2 个数字的元组 ([number, number]) - source-code ref

但是你定义为any[].
根据您的打字稿编译器设置,您可能会收到错误或警告。

显式类型为:

view: [number, number] = [400, 400];

在此 Stackblitz example

中查看更多示例和详细信息

在你的 tsconfig.json 中设置 "strictTemplates": false,像这样:

 "angularCompilerOptions": {
   "enableI18nLegacyMessageIdFormat": false,
   "strictInjectionParameters": true,
   "strictInputAccessModifiers": true,
   "strictTemplates": false,
 }

参考:Angular Compiler Options     TypeScript Configuration