【问题标题】:Is there a way to skip type checking for faster TypeScript compilation?有没有办法跳过类型检查以加快 TypeScript 编译速度?
【发布时间】:2019-02-13 04:16:13
【问题描述】:

使用babel-preset-typescript 时,会跳过类型检查。这几乎肯定比使用普通 tsc 更快且内存占用更少,因为没有类型检查开销,并且完全跳过了绑定和检查步骤(它只是解析和剥离类型)。

我知道TS compiler API 不提供完全相同的功能,因为 babel 完全使用了不同的解析器(Ballyon)。但是有没有办法做类似的事情并跳过绑定和检查更快的编译?看起来ts.createProgram 自动包含类型检查。

【问题讨论】:

    标签: typescript typescript-compiler-api


    【解决方案1】:

    你感兴趣的函数是ts.transpileModuleSource/Documentation)。

    例如:

    const compilerOptions: ts.CompilerOptions = {
        // you'll probably want to load this from a tsconfig.json
        target: ts.ScriptTarget.ES5,
        module: ts.ModuleKind.CommonJS
    };
    const result = ts.transpileModule("const t = 5;", {
        compilerOptions,
        reportDiagnostics: false
    });
    
    console.log(result.outputText); // "var t = 5;"
    

    因此,您需要遍历所有 typescript 文件路径,从磁盘读取它们,转译它们,然后将它们作为 js 文件全部写入文件系统。您也可以并行读取和写入文件系统(编译器同步执行此操作,因此异步执行此操作将提高性能)。

    您可能已经注意到,ts.transpileModule 仍然会创建一个程序,但它仍然应该比常规进程快得多,因为它一次只知道一个文件的信息。要跳过创建程序,我认为需要使用内部 emitFiles 函数......尽管这需要实现内部 EmitResolver 类型以支持该场景,我不确定是否可以正确执行绑定(我不太了解,所以不能肯定)。

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2020-05-25
      • 2014-02-08
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多