Open2

d.tsファイルのアンビエント宣言 (namespace vs var)

tasshitasshi

d.ts ファイルでグローバルオブジェクトをアンビエント宣言したい。
よく見るのは namespace だけど、var で書いてるのも見かける。

どっちがいいの??
namespace のほうが同一名前空間のマージができて良いような気もしつつ、決め手に欠けり。

namespace の場合

export {};
global {
  namespace aaa {
    function bbb(input: string): Promise<string>;
    namespace bbb {
      function ccc(input: number): number;
    }
  }
}

var の場合

export {};
global {
  var aaa: {
    bbb: {
      (): (input: string) => Promise<string>;
      ccc: (input: number) => number;
    };
  };
}