2017-07-03 98 views
1

我正在构建一个小脚本,使用TypeScript Compiler API扫描所有具有给定类型成员的接口,其中的源可找到here。我检查这些班级的成员,看看他们是如何相互关联的。使用TypeScript类型检查器来查看是否可分配两种类型

我的问题是:我怎么知道何时可以将一个类型赋值给另一个类型?我搜索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(这是真的在这种情况下)。

回答

-3

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 
+0

我在修改编译器本身:https://github.com/Microsoft/TypeScript/tree/master/src/compiler – samvv