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> {}
然而,如果知道是否有一些技巧可以更快地比较子类,那还是很高兴的。例如。是否可以禁用结构类型并使用名义子类。