typescript - 有没有办法跳过类型检查以加快 TypeScript 编译速度?
问题描述
使用babel-preset-typescript时,会跳过类型检查。这几乎肯定比使用普通 tsc 更快且内存占用更少,因为没有类型检查开销,并且完全跳过了绑定和检查步骤(它只是解析和剥离类型)。
我知道TS 编译器 API不提供完全相同的东西,因为 babel 完全使用不同的解析器(Ballyon)。但是有没有办法做类似的事情并跳过绑定和检查更快的编译?看起来ts.createProgram
自动包括类型检查。
解决方案
您感兴趣的功能是ts.transpileModule
(Source / 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
类型来支持场景,我不确定在没有绑定的情况下是否可以正确执行(我不对它了解很多,所以不能肯定地说)。
推荐阅读
- spring-boot - 如何从 Spring Boot 指标(datadog)中删除默认的核心指标?
- windows - 如何从列表中批量删除名称
- python - 检查字符串是否不包含列表中的字符串
- django - 当前路径 account/active/muSxcXQedffNqDxt/ 与其中任何一个都不匹配
- c - 初学者:如何将随机生成的数字转换为从 1 到 7 的数字
- java - 当我为同一个对象返回不同的哈希码时,为什么 HashMap 会覆盖现有对象?
- amazon-sqs - 无服务器 Lambda SQS 访问被拒绝错误
- python - 尝试转换时间列时出现 SettingWithCopyWarning 错误
- autoit - 以班级为重点关注 AutoIT 中的窗口
- http - WebRDP 在 nginx 反向代理配置上无法正常工作