在Dart Analyzer中解决某些问题的补丁程序时,我需要了解Null本身是否被视为可为null的类型。
当前,由Dart的类型代数为String和Null计算的最小上限为String。
但是,我认为String和Null的类型并集是可为null的String。
带补丁程序的票证:https://github.com/dart-lang/sdk/issues/38585请注意,补丁程序在将T扩展到T时仍然存在错误。如果闭包同时返回T和null。
奖金问题(机票https://github.com/dart-lang/sdk/issues/38623):Null本身是否是可为null的类型,应该在其后缀“?”吗?
我的观点是矛盾的证明(LUB是最小上限函数):
答案 0 :(得分:1)
Dart尚未具有不可为null的类型。因此,写为String
的类型是可为空的字符串。 Null
类型被认为是任何类型的子类型,因此Null
和{nullable} String
的最小上限是(nullable)String
。
当Dart获取不可为空的类型时,它将改变。然后,写成String
的类型将是不可为空的,而String?
将是可为空的,并且(希望如此)Null
和String
的最小上限应为{ {1}}。非空类型尚不可用,但是它们正在设计中,有望在准备就绪时被释放。
如果您想修补Dart分析器,则需要注意相同类型的两个类型系统,因为如果传递正确的标志和正确的标志,分析器已被修改为可以识别某些非空类型源代码。