我有一个类型脚本声明文件,如下所示:
/// <reference types="node" />
declare namespace foo {
interface bar {
}
}
declare const foo: foo.bar;
export = foo;
这与TS 2.0 / 2.2编译得很好。但是,如果命名空间包含任何class
- 例如将bar
更改为某个类,添加另一个class bam
等。 - Typescript会为两个声明行抛出错误TS2300: Duplicate identifier 'foo'.
。编写的代码的目标是利用Typescript中的声明合并,当foo
仅包含interface
时,代码按预期工作(type
似乎可以包含在foo
也是。如果foo
包含任何class
es?
答案 0 :(得分:2)
这是因为class
具体。当namespace
仅包含类型或包含代码时,namespace x
的行为会有所不同。
当它包含代码时,它也会发出值。即var x
将成为var foo
。
如果它不包含代码,则不会发出任何代码。
这就是为什么当它包含类时,它会发出const foo
因此与你的bash -c
冲突。
https://www.typescriptlang.org/docs/handbook/declaration-merging.html