首页 > 解决方案 > 有没有办法跳过类型检查以加快 TypeScript 编译速度?

问题描述

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

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

标签: typescripttypescript-compiler-api

解决方案


您感兴趣的功能是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类型来支持场景,我不确定在没有绑定的情况下是否可以正确执行(我不对它了解很多,所以不能肯定地说)。


推荐阅读