首页 > 解决方案 > 正好两种类型的 Dart 列表

问题描述

在 Dart 中是否有可能像在 TypeScript 中一样拥有完全两种类型的列表?例如,这样的东西会编译:

List<int|String> foo = [
    1,2,3,4,'baz'
];

虽然这不会:

List<int|String> foo = [
    1,2,false,4,'baz',[],3.0
];

标签: dartstatic-typing

解决方案


不。

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

两个可用的例外是:

  • 某事或Null(可为空的类型,如int?)。
  • 某事或Future同一事物的某物(FutureOr)。

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


推荐阅读