specify_nonobvious_local_variable_types
为局部变量指定非显而易见的类型注解。
此规则目前为实验性,在 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(14) 如果 C 是一个非泛型类,或者 C
(14) 如果 C 接受一个类型参数,但不是 C(14) 如果 C 接受一个或多个类型参数。 - 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
除非另有说明,本站点的文档反映了 Dart 3.6.0。页面最后更新于 2024-07-03。 查看源代码 或 报告问题。