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

How to get the subtypes of a generic type using `DartType` from `analyzer` package?

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

例如如果类型是List<String>,我想得到String。如果类型是 generic.

也将很有用

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

这个有点棘手 - 因为 DartType actually itself has some super types - the one that will interest you here is 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;
}

希望对您有所帮助!