6

如何使用包中的 DartType 类获取元素的子类型analyzer

例如,如果类型是List<String>,我想得到String。如果类型是 .get 也将很有用generic

另一个更复杂的例子是Map<String, String>我想要获取子类型列表的地方,在这种情况下:[String, String].

4

1 回答 1

8

这个有点棘手 - 因为DartType实际上它本身有一些超级类型 - 你会感兴趣的是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;
}

希望有帮助!

于 2017-01-20T02:05:26.573 回答