来自官方 angular 脚本的错误

Errors from official angular script

我从https://material.angular.io/components/chips/overview复制了以下代码:

visible: boolean = true;
selectable: boolean = true;
removable: boolean = true;
addOnBlur: boolean = true;

// Enter, comma
separatorKeysCodes = [ENTER, COMMA];

fruits = [
  { name: 'Lemon' },
  { name: 'Lime' },
  { name: 'Apple' },
];


add(event: MatChipInputEvent): void {
  let input = event.input;
  let value = event.value;

  // Add our fruit
  if ((value || '').trim()) {
      this.fruits.push({ name: value.trim() });
  }

  // Reset the input value
  if (input) {
      input.value = '';
  }
}

remove(fruit: any): void {
  let index = this.fruits.indexOf(fruit);

  if (index >= 0) {
      this.fruits.splice(index, 1);
  }
}

但我收到以下错误:

  • TSLint: Type boolean trivially inferred from a boolean literal, remove type annotation (no-inferrable-types)
  • Unused field visible
  • TSLint: Identifier 'value' is never reassigned; use 'const' instead of 'let'. (prefer-const)

为什么我会收到这些错误?我不认为这是 Angulars 的错。所以我一定是做错了什么?!

那些是 linting 错误,换句话说,它们不会产生错误,但它们存在是因为代码不符合 TSlint 样式指南,例如当您使用 standard js linter 和你正在放置 ; linter 会在 ; 下划线作为错误。

这些不是 "errors" 来自官方 Angular 文档。它们是来自 typescript linter 的警告。 Angular CLI 与 TSLint 捆绑在一起,TSLint 是一个检查您的代码并向您发出警告的软件包,因此您可以保持代码整洁并遵守标准。

  • TSLint: Type boolean trivially inferred from a boolean literal, remove type annotation (no-inferrable-types)

声明变量时,如果初始化它,则无需指定类型,因为 typescript 可以从指定值推导出它。

let myVar = true; // myVar is of inferred boolean type
  • Unused field visible

您声明了变量 visible 但从未使用过。这是一个提示,也许只是将其从您的代码中删除。

  • TSLint: Identifier 'value' is never reassigned; use 'const' instead of 'let'. (prefer-const)

如果您从未将值重新分配给变量,请使用 const 而不是 let。 const 变量将保存一个值,同时保护它不被更改。

只需使用推荐的修改:

selectable = true;
removable = true;
addOnBlur =true;

// Enter, comma
separatorKeysCodes = [ENTER, COMMA];

fruits = [
  { name: 'Lemon' },
  { name: 'Lime' },
  { name: 'Apple' },
];


add(event: MatChipInputEvent): void {
  let input = event.input;
  const value = event.value;

  // Add our fruit
  if ((value || '').trim()) {
      this.fruits.push({ name: value.trim() });
  }

  // Reset the input value
  if (input) {
      input.value = '';
  }
}

remove(fruit: any): void {
  let index = this.fruits.indexOf(fruit);

  if (index >= 0) {
      this.fruits.splice(index, 1);
  }
}

这是因为您的 IDE

启用了 TSLint

TSLint:从布尔文字中简单推断出类型布尔值,删除类型注释(不可推断类型)

在 ts 中类型是可推断的——你不需要在分配布尔值时明确提及 :boolean。更改如下

visible = true;
selectable = true;
removable = true;
addOnBlur = true;

未使用字段可见

您没有在代码中的任何地方使用 visible

TSLint:永远不会重新分配标识符 'value';使用 'const' 而不是 'let'。 (首选常量)

当您不重新分配变量时,您将其定义为 const 而不是 let

const value = event.value;

您还可以选择在 tslint.json

中禁用此警告

"no-inferrable-types": [true, "ignore-params"] "no-inferrable-types": [false, "ignore-params"]