DRYな備忘録

Don't Repeat Yourself.

TypeScriptのダックタイピングをちょっとメモ

メモ

interface Fooer {
    foo: number;
}
interface Barer {
    bar: string;
}

var AcceptFooer = (fooer: Fooer) => {
    console.log("Its foo is ", fooer.foo);
}
var AcceptBarer = (barer: Barer) => {
    console.log("Its bar is ", barer.bar);
}

var both = {
    foo: 1000,
    bar: "ほげ",
    // 余計なものがあっても、
    // インターフェース定義さえ満たば
    // 型制約突破できる (=ダックタイピング)
    extraProperty: true
};

AcceptFooer(both);
AcceptBarer(both);

/* 以下のものはコンパイル通らない

var myFooer = {
    foo: "おっぱい"
};

// fooのtypeが違うから
AcceptFooer(myFooer);
// barが無いから
AcceptBarer(myFooer);

*/

ちなみに

なお、 @vvakameさんはTypeScriptリファレンス Ver.1.0対応の著者氏です。恐れ多くもありがたいです!

雑感

趣味でGo書くことが多く(というか総量ではGoの方が書いてる)、Goのinterface制約もimplementsキーワードじゃなくてダックタイピング。だけどGoの場合はメソッドの型だけ見てるので、時々こんがらがる。

DRY