如何使用 `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;
}
希望对您有所帮助!
如何使用 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;
}
希望对您有所帮助!