我尝试在通用类型的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
):
是否有某种方法可以重构我的类扩展以正确推断类型?
(尝试使用dart 2.9.0-18.0.dev和dart 2.8.4)