内容

omit_obvious_local_variable_types

省略本地变量的显式类型注释。

此规则目前处于实验性阶段,尚未在稳定版 SDK 中提供。

此规则有一个可用的快速修复

不兼容规则:always_specify_types

详情

#

不要对初始化的局部变量进行类型注释,当类型很明显时。

局部变量,特别是在现代代码中,函数往往很小,作用域非常小。省略类型可以使读者将注意力集中在变量的更重要的名称及其初始化值上。因此,应该省略明显的地方变量类型注释。

错误

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

  return desserts;
}

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

正确

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

  return desserts;
}

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

有时推断的类型不是您希望变量具有的类型。例如,您可能打算稍后分配其他类型的值。您可能还想显式地编写类型注释,因为初始化表达式的类型不明显,而且为代码的未来读者记录此类型将很有帮助。或者您可能希望承诺使用特定类型,这样将来更新依赖项(在附近的代码中,在导入中,在任何地方)都不会静默地更改该变量的类型,从而在使用该变量的位置引入编译时错误或运行时错误。在这些情况下,请继续使用您想要的类型注释变量。

正确

dart
Widget build(BuildContext context) {
  Widget result = someGenericFunction(42) ?? Text('You won!');
  if (applyPadding) {
    result = Padding(padding: EdgeInsets.all(8.0), child: result);
  }
  return result;
}

此规则处于实验阶段。它正在评估中,可能会更改或删除。欢迎您提供有关其行为的反馈!主要问题在这里:https://github.com/dart-lang/linter/issues/3480。

用法

#

要启用omit_obvious_local_variable_types规则,请在您的analysis_options.yaml文件中将omit_obvious_local_variable_types添加到linter > rules

analysis_options.yaml
yaml
linter:
  rules:
    - omit_obvious_local_variable_types