【问题标题】:Using the TypeScript type checker to see if two types are assignable使用 TypeScript 类型检查器查看两种类型是否可分配
【发布时间】:2017-12-06 21:00:39
【问题描述】:

我正在构建一个小脚本,它使用TypeScript Compiler API 扫描具有给定类型成员的所有接口,其中的源代码可以在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 compiler-construction typescript-compiler-api


    【解决方案1】:

    Typescript 只是 JavaScript 的超集。您不能使用 TypeScript 进行 Javascript 无法进行的“运行中”验证。

    JavaScript 没有“类”或“继承”信息。它只知道创建对象并验证实例是否是对象的实例。

    JavaScript 确实有一个名为“instaceof”的方法,用于验证实例是否是类的实例。例如。

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2021-11-14
      • 2011-01-08
      相关资源
      最近更新 更多