きっかけ
業務でTypeScriptを使っていたが、意味不明なエラーが出て、かなり悩んだ。
インタフェースの重複の問題
コード
問題になったコードとは異なるが、だいたい同じような感じ。
export interface testif1 <T1, T2>{ value1: T1; value2: T2; } export interface testif1 <E1, E2>{ value3: E1; value4: E2; } class Sample implements testif1<string, string> { }
おきること
このコードだと、実際にコンパイルエラーになる。
Javaをやってきたら「何で?」って思うけど、エラーなのだ。
コンパイルエラーの原因は、インタフェースがマージされるため、宣言しなければいけない型が増える。
上記コードは、下記のインタフェースを実装するのと同じ。
export interface testif1 <T1, T2, E1, E2>{ value1: T1; value2: T2; value3: E1; value4: E2; }
対策
namespace使うなり、モジュール化する。
影響範囲が小さくなるようにすることが大切。
こんな状況に陥ることはレアケースだと思うが、知っている/知らないでは、ドツボにハマることがある。