javascript - 防止 Typescript 编译器检查整个类以节省时间?

标签 javascript node.js typescript tsconfig typescript-compiler-api

Typescript 编译运行需要很长时间,所以我使用了 generateTrace来自 https://github.com/microsoft/TypeScript/pull/40063
它表明大部分时间都在将复杂的类与其子类进行比较。例如。其中一个类是基 Objection 模型 (https://github.com/vincit/objection.js),它是我所有模型都继承的基类。
例如。我有如下代码:

class User extends Model {}

function doSomething(model: typeof Model) {}

doSomething(User);
我有大约 50 个模型。我认为TS第一次遇到每个模型都很慢,然后它会缓存它。 TS 将特定模型与基础 Model 进行比较大约需要 5s . Model使用来自多个库的类型。这是跟踪的屏幕截图,只需将每个模型与 Model 进行比较就需要 5 分钟:
enter image description here
有没有办法让 TS 跳过比较 Model与自己? IE。自从 User扩展 Model ,不需要检查它继承的字段。
编辑:
我将检查 50 个模型的时间从 5 分钟缩短到 30 秒。我有一张模型图:
type ModelType = 'user' | ...

type ModelsMap = {
  user: User,
  ...
};

getModel<T extends ModelType>(type: T): ModelsMap[T] {}
这很慢,因为 ModelsMap[T]是所有模型的联合。如果我在 T 时返回基本模型,它会变得更快。是所有模型类型的联合:
type TypeToModel<T extends ModelType> = ModelType extends T ? Model : ModelsMap[T];

getModel<T extends ModelType>(type: T): TypeToModel<T> {}
但是,很高兴知道是否有技巧可以更快地比较子类。例如。如果可以禁用结构类型并为子类使用名义。

最佳答案

我不确定这对您的情况是否有帮助,但您可以通过允许 incremental 显着加快该过程。标记您的tsc命令:

// package.json
"tsc": "tsc -v && tsc --noEmit --skipLibCheck --incremental",

这将创建一个 tsconfig.tsbuildinfo文件,这实际上是您的代码库的图表。然后,Typescript 将仅比较您更改的条目。第一次编译会很慢,因为它会生成图形,但之后编译时间至少会减少 3 倍。

关于javascript - 防止 Typescript 编译器检查整个类以节省时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70459685/

相关文章:

javascript - 从 JavaScript 中的表格单元格中获取值...而不是 jQuery

typescript - 如何设计一个在构建后配置的 vue-cli 应用程序?

Angular 手动更新 ngModel 并将表单设置为脏或无效?

javascript - 口译员和安全口译员有什么区别?

javascript - 通过 Canvas 将 SVG 下载到 PNG 时如何避免出现黑色或空白图像?

javascript - 快速鼠标悬停鼠标移出时的动画错误

node.js - 对话流履行和 Firebase 响应时间

Node.js 服务器 'close' 事件似乎没有触发

node.js - 测试失败时不会调用 done()

angular - TypeScript -'s Angular Framework Error - "没有将 exportAs 设置为 ngForm 的指令”