为什么在 null-safe dart 中使用 'var' 声明的变量可以为 null?

Why can a variable declared using 'var' be null in null-safe dart?

我正在从 docs

复制这个
// In null-safe Dart, none of these can ever be null.
var i = 42; // Inferred to be an int.
String name = getFileName();
final b = Foo();

但是我 运行 下面的代码在 null-safe dartpad 中,它可以编译。

void main() {
  var x = null;
  print(x);
}

这是文档错误还是我遗漏了什么?

您的示例与文档试图解释的内容并不接近。试试这个:

void main() {
  var x = 42;
  x = null; // Error: A value of type 'Null' can't be assigned to a variable of type 'int' - line 3
  print(x);
}

原因是 var x = 42 是“推断为 int”而不是 int?

在您的示例中,发生的情况是 var x = null 已解析,因此 x 被视为 dynamic 类型,因为 Dart 不知道您要使用的类型。因为 dynamic 可以有值 null 你很高兴去。