2017-07-03 94 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