使用 TypeScript 类型检查器查看两种类型是否可赋值

Using the TypeScript type checker to see if two types are assignable

我正在构建一个小脚本,它使用 TypeScript Compiler API, of which the source can be found here 扫描具有给定类型成员的所有接口。我检查了这些 类 的成员,看看它们是如何相互关联的。

我的问题是:我如何知道一个类型何时可以分配给另一个类型?我在 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 
}

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

Typescript 只是 JavaScript 的超集。您无法使用 TypeScript 进行 'on the run' 无法使用 Javascript.

进行的验证

JavaScript 没有 "classes" 或 "inherit" 信息。它只知道创建对象并验证实例是否是对象的实例。

JavaScript 确实有一个名为 'instaceof' 的方法来验证一个实例是否是 class 的实例。例如。

var x = new ASTKind.Multiplication
x instanceof ASTKind.Multiplication // will return true
x instanceof AST // sill also return true

我找到了:目前看来是不可能的:

我创建了自己的 fork 来公开此功能。我会尽力维护它,所以如果有人感兴趣,他或她可以使用叉子直到上游跟进。