编译器会把多个地方具有相同声明合并为一个声明
接口之间可以重复定义,在命名空间不可以
interface A {
x: number;
y: number;
// y: string;
foo (bar: number): number //5
foo (bar: 'a'): number // 2
}
interface A {
y: number;
foo (bar: string): string; // 3
foo (bar: number[]): number[] // 4
foo (bar: 'b'): number // 1
}
let e: A = {
x: 1,
y: 1,
foo(bar: any) {
return bar
}
}
// 命名空间和函数的声明合并
function Lib() {}
namespace Lib {
export let version = '1.0'
}
console.log(Lib.version)
// 命名空间和类的声明合并
class F {}
namespace F {
export let state = 1
}
console.log(F.state)
// 命名空间和枚举的声明合并
enum Color {
Red,
Yellow,
Blue
}
namespace Color {
export function mix() {}
}
console.log(Color)
// 函数、类和命名空间的声明合并,必须是命名空间的声明需在后,但是枚举和命名空间的声明合并无此要求