目錄

指定_不明顯的_屬性_類型

為頂層和靜態變數指定不明顯的類型註釋。

此規則目前為實驗性,尚未在穩定的 SDK 中提供。

此規則提供快速修復

詳細資訊

#

當類型不明顯時,請為已初始化的頂層或靜態變數加上類型註釋。

頂層或靜態變數的類型註釋可以作為類型推斷的請求,記錄類型推斷步驟的預期結果,並聲明式地允許編譯器和分析器解決可能複雜的任務,即在初始化運算式中尋找產生所需結果的類型引數和註釋。

頂層或靜態變數的類型註釋也可以告知讀者初始化運算式的類型,這將使他們能夠繼續閱讀程式碼中此變數使用的位置,並了解有關給定變數類型的已知良好資訊(這可能無法立即透過查看初始化運算式來判斷)。

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

在以下情況下,運算式 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 是類型轉換。例如,myComplexpression as int。

不良

dart
final myTopLevelVariable =
    genericFunctionWrittenByOtherFolks(with, args);

class A {
  static var myStaticVariable =
      myTopLevelVariable.update('foo', null);
}

良好

dart
final Map<String, Widget?> myTopLevelVariable =
    genericFunctionWrittenByOtherFolks(with, args);

class A {
  static Map<String, Widget?> myStaticVariable =
      myTopLevelVariable.update('foo', null);
}

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

用法

#

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

analysis_options.yaml
yaml
linter:
  rules:
    - specify_nonobvious_property_types