使用 TypeScript 类型检查器查看两种类型是否可分配

sam*_*mvv 7 compiler-construction typescript typescript-compiler-api

我正在构建一个小脚本,该脚本使用TypeScript Compiler API扫描具有给定类型成员的所有接口,其源代码可在此处找到。我检查这些类的成员,看看它们是如何相互关联的。

我的问题是:我怎么知道一种类型何时可以分配给另一种类型?我搜索了TypeChecker一种方法,但找不到。有没有人有任何指示?这是一个应该能够分析的东西的例子:

export enum ASTKind {
  Number,
  Addition,
  Multiplication,
}

export interface AST {
  kind: ASTKind  
}

export interface BinaryExpression extends AST {
  left: AST
  right: AST
}

export interface Addition extends BinaryExpression {
  kind: ASTKind.Addition 
}

export interface Multiplication extends BinaryExpression {
  kind: ASTKind.Multiplication 
}
Run Code Online (Sandbox Code Playgroud)

本质上,我想要一个谓词,说明是否ASTKind.Multiplication可分配给ASTKind(在这种情况下为真)。

sam*_*mvv 6

我找到了:目前似乎不可能:

我创建了自己的fork来公开这个函数。我会尽量维护它,所以如果有人感兴趣,他或她可以使用叉子直到上游跟随。