首页 > 解决方案 > Dart:对泛型类型进行类扩展的类型推断

问题描述

我尝试在Future泛型类型上创建类扩展以提取泛型包装类型的值。

abstract class GenericClass<T> {
  T foo();
}

class IntClass extends GenericClass<int> {
  @override
  int foo() => 42;
}

extension GenericClassExt<T> on Future<GenericClass<T>> {
  Future<T> resolve() => then((value) => value.foo());
}

Future<IntClass> produce() => Future.value(IntClass());

Future<void> main() async {
  final wrapper = produce();
  final val = wrapper.resolve();
  print('val: $val');
}

在这里,我希望val被推断为类型int(因为 producer() 是一个 IntClass)并且wrapper被正确推断为Future<IntClass>. 但我看到以下错误:

'val' 缺少变量类型。

尝试添加像“动态”这样的显式类型,或者在您的分析选项文件中启用隐式动态。

奇怪的是,在dartpad上,类型似乎被正确推断(虽然它可能启用了隐式动态..但它似乎仍然推断变量类型int):

推断类型

有什么方法可以重构我的类扩展以正确推断类型?

(尝试使用 dart 2.9.0-18.0.dev 和 dart 2.8.4)

标签: flutterdart

解决方案


推荐阅读