avoid_futureor_void
避免使用 'FutureOr
此规则目前为实验性,可在 Dart 3.6 及更高版本中使用。
详情
#避免使用 FutureOr<void>
作为结果的类型。此类型存在问题,因为它可能表示结果要么是 Future<void>
,要么应丢弃结果(当它是 void
时)。然而,没有安全的方法来检测我们是哪种情况(因为 void
类型的表达式可以求值为任何对象,包括任何类型的 future)。
拥有一个含义类似于“忽略此对象;另外,看看它,因为它可能是一个 future”的类型,在概念上也是不合理的。
对于类型 FutureOr<void>
的逆变出现(例如,对于形式参数的类型),有一个例外,并且不会针对这些出现发出警告。此例外的理由是该类型没有描述结果,而是描述了对其他人提供的值的约束。类似地,对于类型别名声明也有一个例外,因为它们很可能用在逆变位置(例如,作为形式参数的类型)。因此,在类型别名声明中,仅检查类型参数的边界。
类型 FutureOr<void>
的一个常用替代品是 Future<void>?
。此类型表示结果要么是 Future<void>
,要么是 null,并且在运行时没有歧义,因为没有对象可以同时具有这两种类型。
可能并非总是可以使用类型 Future<void>?
来代替类型 FutureOr<void>
,因为后者是所有类型的超类型,而前者不是。在这种情况下,将 FutureOr<void>
替换为 void
类型可能是一个有用的补救方法。
错误
FutureOr<void> m() {...}
正确
Future<void>? m() {...}
此规则是实验性的。正在对其进行评估,并且可能会更改或删除。欢迎提供有关其行为的反馈!主要问题在这里:https://github.com/dart-lang/linter/issues/4622
用法
#要启用 avoid_futureor_void
规则,请在您的 analysis_options.yaml
文件中的 linter > rules 下添加 avoid_futureor_void
linter:
rules:
- avoid_futureor_void
除非另有说明,本网站上的文档反映了 Dart 3.6.0。页面最后更新于 2024-07-03。 查看源代码或报告问题。