首页 > 解决方案 > 在 Dart 语言中使用实验性扩展方法时的类型推断

问题描述

当我让 Dart 分析下面的例子时......

extension MyList<T> on List<T> {
  List<T> mapToList<T>(T Function(T) convert) => this.map<T>(convert).toList();
}

... dartanalyzer 在转换时报告类型错误,声称“参数类型 'T Function(T)' 不能分配给参数类型 'T Function(T)'.dart(argument_type_not_assignable)”。我想在提交问题之前了解为什么我犯了错误。

标签: darttypesextension-methodstype-inference

解决方案


map 方法被定义为 Iterable<T> map<T>(T f(E e)) => MappedIterable<E, T>(this, f);其中 E 是列表的类型,它可以与列表的类型不同。所以你必须做的是:

extension MyList<E> on List<E> {
  List<T> mapToList<T>(T convert(E e)) => this.map<T>(convert).toList();
}

推荐阅读