gpt4 book ai didi

TypeScript:模块 x 无法与先前在不同文件中声明的 x 合并

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:32 26 4
gpt4 key购买 nike

我有一个 typescript 项目,其中一个模块被拆分成多个文件。有一个与该模块同名的类通过声明合并获取嵌套类,但编译器抛出错误:Bar.ts(1,1):错误 TS2188:模块“Foo”无法与先前在不同文件“path/to/my/file/Foo.ts”中声明的“Foo”合并。

文件'Foo.ts'

class Foo {
constructor() {

}
}

文件'Bar.ts'

module Foo {
export class Bar {
constructor() {

}
}
}

我正在使用 tsc Foo.ts Bar.ts --declaration --out foo.js

进行编译

我的主要问题是,我希望能够在我的 Foo 类中使用 var bar = new Bar();,我认为应该提供声明合并(语言规范在这里并没有真正帮助我)。现在我必须使用 var bar = new Foo.Bar();,这很烦人。

是我做错了什么还是编译器错误?

顺便说一句,--declaration 似乎不起作用,希望这是由这些错误引起的。

最佳答案

模块和类可以在这些限制下合并:

  1. 模块必须在类之后
  2. 它们必须在同一个文件中

如果您查看为此生成的代码,规则 #1 的原因就变得显而易见了——在 JavaScript 中,您可以向函数(在本例中为构造函数)添加属性,但您不能接受现有对象并将其转换为函数。

#1 是#2 的结果,因为对于并行编译,没有办法强制一个脚本在另一个脚本之前加载,如果顺序错误,您将看到的行为将非常困难进行调试。

关于TypeScript:模块 x 无法与先前在不同文件中声明的 x 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com