有没有一种方法可以跳过类型检查以更快地编译TypeScript?

时间:2019-02-03 18:37:52

标签: typescript typescript-compiler-api

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

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

1 个答案:

答案 0 :(得分:2)

您感兴趣的功能是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;"

因此,您要遍历所有打字稿文件路径,从磁盘读取它们,进行转换,然后将它们全部作为js文件写入文件系统。您也可以并行进行文件系统的读写(编译器是同步进行的,因此异步进行会带来性能上的改善)。

尽管您可能已经注意到,ts.transpileModule仍会创建一个程序,但它仍比常规过程要快得多,因为它一次只知道一个文件就发出了。要跳过创建程序的过程,我相信需要使用内部emitFiles函数……尽管这需要实现内部EmitResolver类型以支持该场景,但我不确定是否可能在没有约束的情况下正确执行操作(我对此不太了解,所以不能肯定地说)。