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
(因为 producer() 是一个 IntClass)并且wrapper
被正确推断为Future<IntClass>
. 但我看到以下错误:
'val' 缺少变量类型。
尝试添加像“动态”这样的显式类型,或者在您的分析选项文件中启用隐式动态。
奇怪的是,在dartpad上,类型似乎被正确推断(虽然它可能启用了隐式动态..但它似乎仍然推断变量类型int
):
有什么方法可以重构我的类扩展以正确推断类型?
(尝试使用 dart 2.9.0-18.0.dev 和 dart 2.8.4)
解决方案
推荐阅读
- node.js - 如何解决您需要启用 javascript 才能在 React 应用程序中运行此应用程序的问题?
- java - 没有CALL_LOG权限无法获取Android P来电号码
- python - 如何在 python 中创建一个显示所有可用命令的命令?喜欢终端的帮助
- javascript - 如何使用函数 removeData 添加和删除嵌套数组“项目”中的数据
- python - 如何以最佳方式处理不在 word2vec 词汇中的单词
- php - 用于多租户的 Laravel Spatie/权限过滤器
- c# - 使用 ContinueDialogAsync 时字典中不存在给定键“对话框”
- c# - 有条件地创建对象
- delphi - 表单控件(编辑、组合框、备忘录等)查询是否已修改?
- sql - Firebird/Lazarus SQL 视图与选择 iif?