dart - 如何使用 `DartType` 包中的 `analyzer` 获取泛型类型的子类型?

标签 dart analyzer dart-analyzer

如何使用类 DartType 获取元素的子类型来自analyzer包?

例如,如果类型为 List<String> ,我想要String 。如果类型是 generic 也很有用.

另一个更复杂的例子是 Map<String, String>我想在其中获取子类型列表,在本例中为: [String, String] .

最佳答案

这个有点棘手 - 因为 DartType实际上它本身有一些 super 类型 - 您会感兴趣的是 ParameterizedType :

import 'package:analyzer/dart/element/type.dart';

Iterable<DartType> getGenericTypes(DartType type) {
  return type is ParameterizedType ? type.typeArguments : const [];
}

我不知道是否可以知道该类型是否是泛型 - 毕竟,它只是一种类型。但是您可以再次使用 ClassElement 检查类型是否接受泛型参数:

import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';

bool canHaveGenerics(DartType type) {
  final element = type.element;
  if (element is ClassElement) {
    return element.typeParameters.isNotEmpty;
  }
  return false;
}

希望有帮助!

关于dart - 如何使用 `DartType` 包中的 `analyzer` 获取泛型类型的子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41754912/

相关文章:

dart - 在dart、flutter中使用gcloud speech api进行实时语音识别

flutter - 如何在其初始值 flutter 中将滚动条设置为最大值

dart - 如何从TypeAnnotation Dart 分析器获取在类型上定义的注释

objective-c - ios 在函数内部初始化实例以在外部使用

dart - 如何使用 `DartType` 中的 `analyzer` 类获取子类型?

dart - 分析器包 - 如何在 parseDartFile() 的结果中递归搜索

flutter - 确保所有字段都存在于构造函数参数列表中

flutter - 如何在Flutter中编辑TextEditingController对象的值?

flutter - 带淡出然后淡入的动画交叉淡入淡出

elasticsearch - 从ElasticSearch中的文本中提取数字