gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:22:38 28 4
gpt4 key购买 nike

如何使用类 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com