使用 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
我找到了:目前看来是不可能的:
- Expose isTypeAssignableTo in TypeChecker?
- Proposal: Type Relationship API
- Assignability checks in API
我创建了自己的 fork 来公开此功能。我会尽力维护它,所以如果有人感兴趣,他或她可以使用叉子直到上游跟进。
我正在构建一个小脚本,它使用 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
我找到了:目前看来是不可能的:
- Expose isTypeAssignableTo in TypeChecker?
- Proposal: Type Relationship API
- Assignability checks in API
我创建了自己的 fork 来公开此功能。我会尽力维护它,所以如果有人感兴趣,他或她可以使用叉子直到上游跟进。