目錄

指定_不明顯的_局部_變數_類型

為不明顯的局部變數指定類型註釋。

此規則目前為實驗性,可從 Dart 3.6 開始使用。

此規則有可用的快速修正

不相容的規則:omit_local_variable_types

詳細資訊

#

當類型不明顯時,對已初始化的局部變數進行類型註釋。

局部變數上的類型註釋可以作為類型推斷的請求,記錄類型推斷步驟的預期結果,並以宣告方式允許編譯器和分析器解決在初始化運算式中尋找產生所需結果的類型引數和註釋的可能複雜任務。

局部變數上的類型註釋也可以告知讀者初始化運算式的類型,這將允許他們以關於給定變數類型的已知良好資訊繼續閱讀後續程式碼行(這可能無法透過查看初始化運算式立即顯現)。

當運算式沒有明顯的類型時,則認為該運算式具有不明顯的類型。

在下列情況下,運算式 e 具有明顯的類型

  • e 是非集合字面值。例如,1、true、'Hello, $name!'。
  • e 是具有實際類型引數的集合字面值。例如,<int, bool>{}。
  • e 是清單字面值或集合字面值,其中至少一個元素具有明顯的類型,並且所有元素都具有相同的類型。例如,[1, 2] 和 { [true, false], [] },但不是 [1, 1.5]。
  • e 是地圖字面值,其中所有鍵值對都具有明顯類型的鍵和明顯類型的值,並且所有鍵都具有相同的類型,並且所有值都具有相同的類型。例如,{ #a[] },但不是 {1: 1, 2: true}。
  • e 是類別部分不是原始的執行個體建立運算式。例如,如果 C 是非泛型類別,則 C(14) ,或者如果 C 接受一個類型引數,則 C(14),但如果 C 接受一個或多個類型引數,則不是 C(14)。
  • e 是目標具有明顯類型的串聯。例如,1..isEven..isEven 具有明顯的類型,因為 1 具有明顯的類型。
  • e 是類型轉換。例如,myComplexExpression as int。

錯誤

dart
List<List<Ingredient>> possibleDesserts(Set<Ingredient> pantry) {
  var desserts = genericFunctionDeclaredFarAway(<num>[42], 'Something');
  for (final recipe in cookbook) {
    if (pantry.containsAll(recipe)) {
      desserts.add(recipe);
    }
  }

  return desserts;
}

const List<List<Ingredient>> cookbook = ...;

良好

dart
List<List<Ingredient>> possibleDesserts(Set<Ingredient> pantry) {
  List<List<Ingredient>> desserts = genericFunctionDeclaredFarAway(
    <num>[42],
    'Something',
  );
  for (final List<Ingredient> recipe in cookbook) {
    if (pantry.containsAll(recipe)) {
      desserts.add(recipe);
    }
  }

  return desserts;
}

const List<List<Ingredient>> cookbook = ...;

此規則為實驗性。它正在評估中,可能會變更或移除。歡迎針對其行為提出回饋!主要問題在此:https://github.com/dart-lang/linter/issues/3480。

用法

#

若要啟用 specify_nonobvious_local_variable_types 規則,請在您的 analysis_options.yaml 檔案中的 linter > rules 下新增 specify_nonobvious_local_variable_types

analysis_options.yaml
yaml
linter:
  rules:
    - specify_nonobvious_local_variable_types