エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

TypeScriptでハマったこと インタフェース編

きっかけ

業務で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使うなり、モジュール化する。
影響範囲が小さくなるようにすることが大切。

こんな状況に陥ることはレアケースだと思うが、知っている/知らないでは、ドツボにハマることがある。