我收到错误
“该节点的推断类型超出了编译器序列化的最大长度。需要显式类型注释。”
这在几个小时前工作正常...我所做的任何更改(更新 npm 和节点)对于为什么会发生这种情况没有任何意义。
我绝对不能给出明确的类型注释。
我尝试过的:
这是我对我正在尝试制作的工具的第三次完整重写,因为 Typescript 一直落后于它。
经过三次完整重写、数百个小时和极大的努力,在这个错误开始出现之前,一切都工作正常一整天。
我尝试更新所有内容(typescript、node、npm...没有其他可更新的)
我尝试更新 tsconfig:
"compilerOptions": {
"disableSizeLimit": true,
我不知道该怎么办。我能想到的唯一选择是将 Typescript 扔进垃圾桶并在编译时进行类型检查......我想这对于这个项目来说是很好的。
在该项目的第二次尝试中,我询问了如何更好的缓存
"declaration": false,
将声明设置为 false
tsconfig.json
对我有用
还在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({});
https://github.com/microsoft/TypeScript/issues/43817#issuecomment-827746462
有了这个,你不需要将声明设置为 false
好吧,我已经成功地把这个项目拖得更远了。这是我所做的主要更改:
我不知道为什么会这样,但是如果你有一些复杂的并集/交集,如下所示:
interface A {
a: true,
// code omitted...
}
interface B {
b: true,
// code omitted...
}
// code omitted...
type ComplexIntersection = A & B & C & D & E & F & G;
您可以将所有接口切换为抽象类,如下所示:
abstract class A {
public abstract a: true;
// code omitted...
}
abstract class B {
public abstract b: true;
// code omitted...
}
Typescript 语言服务器会对此感到高兴。我不知道为什么会这样,但这就是类型的样子
我尝试过但不起作用的其他事情:
我在 typescript vue3 代码上遇到了这个问题。它突然出现,没有对文件进行任何更改。
这不是实际的错误,至少在我的代码中是这样。在关联服务文件中的导入接口中,有一个复合接口稍后引用该文件中的另一个接口,而不是之前。
这是一个很容易犯的错误,当我这样做时,vsCode 并没有正确地捕获错误。该代码甚至可以编译并运行得很好。一旦我修复了引用文件中的错误,虚假消息就消失了。