specify_nonobvious_property_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
(14) 如果 C 接受一個類型參數,但如果 C 接受一個或多個類型參數,則不是 C(14)。 - e 是一個串聯,其目標具有明顯的類型。例如,1..isEven..isEven 具有明顯的類型,因為 1 具有明顯的類型。
- e 是一個類型轉換。例如:
myComplexExpression 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/sdk/issues/59550。
啟用
#若要啟用 specify_nonobvious_property_types
規則,請在您的 analysis_options.yaml
檔案中的 linter > rules 下新增 specify_nonobvious_property_types
analysis_options.yaml
yaml
linter:
rules:
- specify_nonobvious_property_types
如果您改用 YAML 映射語法來設定 linter 規則,請在 linter > rules 下新增 specify_nonobvious_property_types: true
analysis_options.yaml
yaml
linter:
rules:
specify_nonobvious_property_types: true
除非另有說明,否則本網站上的文件反映的是 Dart 3.7.1 版本。頁面最後更新於 2025-03-07。 檢視原始碼 或 回報問題。