恰好有两种类型的 Dart 列表

Ben*_*Lee 3 static-typing dart

在 Dart 中是否可以像在 TypeScript 中那样拥有恰好两种类型的列表?例如,这样的东西会编译:

List<int|String> foo = [
    1,2,3,4,'baz'
];
Run Code Online (Sandbox Code Playgroud)

虽然这不会:

List<int|String> foo = [
    1,2,false,4,'baz',[],3.0
];
Run Code Online (Sandbox Code Playgroud)

lrn*_*lrn 5

不。

Dart 类型系统不包含通用联合类型。它不能在类型系统中表达“必须是int或”String

两个可用的例外是:

  • 某些东西或Null(可空类型,例如int?)。
  • 某事物或Future同一事物的一部分 ( FutureOr)。

这两种联合类型是类型系统已知的。对于所有其他组合,您所能做的就是选择一个类型,该类型是这两种类型的超类型。在这种情况下,最接近的公共超类型是Object。类型系统不会阻止您将布尔值或列表放入其中。