Dart:泛型类型的类扩展的类型推断

时间:2020-06-25 11:58:02

标签: flutter 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类型(因为Produce()是一个IntClass),并且将wrapper正确推断为Future<IntClass>。但我看到以下错误:

缺少“ val”的变量类型。

尝试添加显式类型(例如“动态”),或在分析选项文件中启用隐式动态。

dartpad上,奇怪的事情似乎是正确推断了类型(尽管它可能启用了隐式动态。但是,它似乎仍在推断变量类型int):

inferred in type

是否有某种方法可以重构我的类扩展以正确推断类型?

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

0 个答案:

没有答案