编译器会把多个地方具有相同声明合并为一个声明
接口之间可以重复定义,在命名空间不可以
interface A {x: number;y: number;// y: string;foo (bar: number): number //5foo (bar: 'a'): number // 2}interface A {y: number;foo (bar: string): string; // 3foo (bar: number[]): number[] // 4foo (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)// 函数、类和命名空间的声明合并,必须是命名空间的声明需在后,但是枚举和命名空间的声明合并无此要求
