これはマニュアルには含まれていないようです。継承されたクラスのネームスペースでのインターフェイスの宣言のマージ
別名だが継承されたクラスのネームスペース内の同じ名前のインターフェイスがマージされないのはなぜか分かります。以下の例では、2番目のインターフェイスがマージされずに最初のインターフェイスをシャドウしています。継承された名前空間のメンバーが表示されるので、私の勘はインターフェースがマージされると考えていました。明示的にBar.IOptions
を宣言してFoo.IOptions
を拡張することができますが、現在の動作が意図されているかどうかは疑問です。
class Foo {
constructor(options: Foo.IOptions = {}) {
this._a = options.a || 0;
}
private _a: number;
}
namespace Foo {
export interface IOptions {
a?: number;
}
export const c = 12;
}
class Bar extends Foo {
constructor(options: Bar.IOptions) {
super();
this._b = options.b; // okay
this._c = Bar.c; // okay, inherited from Foo
this._a2 = options.a; // fail
}
private _b: string;
private _c: number;
private _a2: number;
}
namespace Bar {
export interface IOptions {
b?: string;
}
}