TypeScript - インターフェイスのマージ
TypeScript では、同じ名前のインターフェイスを複数宣言できて、それぞれが1つのインターフェイスにマージされるようです。
どういうことか試してみましょう。
interface User { id: number; name: string; } interface User { valid: boolean; } function func(user: User) { // ... } // これはOK func({ id: 1, name: "A", valid: true, }); // これはコンパイルエラー /* func({ id: 2, name: "B", }); */ // Supplied parameters do not match any signature of call target: // Type '{ id: number; name: string; }' is missing property 'valid' from type 'User'. // Could not select overload for 'call' expression.
lib.d.ts に定義されている interface にメソッドを足す方法がないか調べていたのですが、こういう方法があるんですね。
以下を参考にしました。
- Walkthrough: Interfaces - TypeScript - Site Home - MSDN Blogs・・・Extending Existing Types のところ
- 言語仕様の Declaration Merging
TypeScript 0.9.1.1で確認しています。