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

How to get subtypes using `DartType` class from the `analyzer`?

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

对于那些想知道的人,DartType class 是由 analyzer 包创建的静态 resolved 类型,Dart 的静态工具包裹。作者问他们如何在给定 DartType 的情况下获得其他类型 - 我想你的意思是 super 类型,即你继承或实现的类型。

(如果你只是想检查 DartType 是否是某个东西的子类型,你可以使用 isSubtypeOf

我们可以获取 DartType 的来源 Element,然后,如果它是 ClassElement,只需 return 所有超级类型,否则可能默认为空列表:

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

/// Returns all sub-types of [type].
Iterable<DartType> getSubTypes(DartType type) {
  final element = type.element;
  if (element is ClassElement) {
    return element.allSupertypes;
  }
  return const [];
}

这是 analyzer 版本 0.29.3