【问题标题】:Create a Typescript TypeChecker without using ts.createProgram?在不使用 ts.createProgram 的情况下创建 Typescript TypeChecker?
【发布时间】:2017-02-25 16:31:23
【问题描述】:

我正在使用 typescript 库进行一些反思。首先,我使用ts.createSourceFile 并传递存储在内存中的文件。这非常有效,我可以轻松地通过节点移动以匹配绑定语法(在 html 文件中)与 ViewModels(打字稿),以确保访问良好。

我的问题是我现在想对我拥有的 ts.SourceFile 对象进行一些基本的类型检查。到目前为止,我只能将TypeChecker 接口追溯到Program 类。不幸的是,ts.createProgram 采用文件路径,而我想传递我已经拥有的 SourceFile 集合。

我有没有办法使用我已经拥有的 ts.SourceFile 对象进行类型检查?我真正需要知道的是右侧是否可分配给左侧,我在左侧都有类型节点。

【问题讨论】:

    标签: typescript typescript2.0 typescript-compiler-api


    【解决方案1】:

    你可以像这样使用ts.createSourceFile()

    let sourceCode = fs.readFileSync(commander.file);
    let sourceFile = ts.createSourceFile(commander.file, sourceCode.toString(), ts.ScriptTarget.ES2015, true);
    visitNode(sourceFile);
    

    然后在visitNode 函数中,您可以访问NodeObject 节点,该节点公开了TypeChecker 信息:

    function visitNode(node: NodeObect) {    
      recognize(node);
      node.getChildren().forEach(c => visitNode(c));
    }
    

    【讨论】:

    • AFAIK,这种方法不能访问类型信息,只能访问语法树。
    • 是的,没错。您将无权访问静态类型。但是,您可以使用ts.SyntaxKind 接口作为解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多