Typescript:“该节点的推断类型超出了编译器序列化的最大长度。需要显式类型注释。”

Sep*_*eed 14 compiler-optimization typescript

在此输入图像描述

我收到错误

“该节点的推断类型超出了编译器序列化的最大长度。需要显式类型注释。”

几个小时前,这工作得很好……我所做的任何更改(更新 npm 和节点)对于为什么会发生这种情况都没有任何意义。

我绝对不能给出显式的类型注释。


我尝试过的:

这是我对我正在尝试制作的工具的第三次完整重写,因为 Typescript 在这方面一直落后。

经过三次完全重写、数百个小时和极大的努力,在这个错误开始出现之前,一切都工作正常一整天。

我尝试更新所有内容(typescript、node、npm...没有其他可更新)

我尝试更新 tsconfig:

"compilerOptions": {
        "disableSizeLimit": true,
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做。我能想到的唯一选择是将 Typescript 扔进垃圾桶并在编译时进行类型检查......我想这对于这个项目来说是很好的。


在这个项目的第二次尝试中,我询问了更好的缓存

tyl*_*lim 5

"declaration": false,

tsconfig.json在我的作品中将声明设置为 false

还在 github 上找到了相关主题 https://github.com/microsoft/TypeScript/issues/43817

这是递归造成的,我也是这样

更新:显然这是真正的解决方案:

type Builder<T> = {
    withComment: (comment: string) => Builder<T & { comment: string }>,
    withSpecialComment: () => Builder<T & { comment: string }>,
    withTrackingNumber: (tracking: number) => Builder<T & { tracking: number }>,
    build: () => T
};

const Builder: <T extends {}>(model: T) => Builder<T> = <T extends {}>(model: T) => ({
    withComment: (comment: string) => Builder({ ...model, comment }),
    withSpecialComment: () => Builder(model).withComment('Special comment'),
    withTrackingNumber: (tracking: number) => Builder({ ...model, tracking }),
    build: () => model });

const a = Builder({});
Run Code Online (Sandbox Code Playgroud)

https://github.com/microsoft/TypeScript/issues/43817#issuecomment-827746462

有了这个你不需要将声明设置为 false