NNBD:String 和 Null 的最小上界

NNBD: Least upper bound of String and Null

正在为 Dart 分析器中的一些问题打补丁,我需要了解 Null 本身是否被视为可空类型。

目前,Dart 的类型代数为 String 和 Null 计算的最小上限是 String。

但是,在我看来,String 和 Null 的类型联合是一个可为 null 的 String。

带补丁的票:https://github.com/dart-lang/sdk/issues/38585请注意,补丁仍然存在将 T 扩展到 T 的错误?如果闭包 returns T 和 null.

红利问题(ticket https://github.com/dart-lang/sdk/issues/38623):Null 本身是可空类型并且应该以'?'为后缀吗?

我的观点反证法(LUB是最小上界函数):

Dart 还没有非空类型。因此,写为 String 的类型是 可以为 null 的字符串。 Null 类型被认为是任何类型的子类型,因此 Null 和 (nullable) String 的最小上限是 (nullable) String.

当 Dart 获得不可为 null 的类型时,这将会改变。那么写成 String 的类型将是不可空的,而 String? 将是可空的,然后 NullString 的最小上限应该(希望如此!)是 String?。 Non-nullable types 尚不可用,但它们正在设计中并有望发布......好吧,当它们准备好时。

如果您正在尝试修补 Dart 分析器,那么您需要同时了解这两种类型系统,因为如果您传递适当的标志,分析器已经被修改为识别一些不可为 null 的类型和正确的源代码。