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

2024-04-23

Typescript 编译需要很长时间才能运行,所以我使用generateTrace from https://github.com/microsoft/TypeScript/pull/40063 https://github.com/microsoft/TypeScript/pull/40063

它表明大多数时间是将复杂的类与其子类进行比较。例如。其中一个类是基本对象模型(https://github.com/vincit/objection.js https://github.com/vincit/objection.js),这是我所有模型继承的基类。

例如。我有这样的代码:

class User extends Model {}

function doSomething(model: typeof Model) {}

doSomething(User);

我有大约 50 个模型。我认为 TS 第一次遇到每个模型时很慢,然后它会缓存它。 TS将特定模型与基础进行比较大约需要5秒Model. Model使用多个库中的类型。这是跟踪的屏幕截图,仅将每个模型与Model:

有没有办法让 TS 跳过比较Model与自己? IE。自从User延伸Model,不需要检查它继承的字段。

Edit:

我将检查 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止 Typescript 编译器检查整个类以节省时间? 的相关文章

随机推荐