Javaとかやってる人がTypescriptって比較的カンタンに学習できると思うんですが、各種シグニチャが結構難しい。
インデックスシグニチャ
配列の添字を定義できる。この場合は、数値。文字列を指定すれば文字列でもできる。
interface SampleA { [index: number]: boolean; } var a: SampleA = {}; a[1] = true; console.log(a[1]); === true ===
コールシグニチャ
オブジェクト型が関数っぽく使えるみたいです。
interface SampleA{ (word: string): string; } var a = SampleA = function(word: string): string{ return "call sig:" + word; } console.log(objB("typescript")); == 実行 call sig, typescript ==
メソッドシグニチャ
関数を呼び出すためのインターフェースを定義できる。
interface SampleA{ sample(x:number):string; sample(x:string):string; } class SampleAImpl implements SampleA { sample(x:any): string { return "class: " + x; } } var a : SampleA = new SampleAImpl(); console.log(a.sample("a")); console.log(a.sample(1)); // console.log(a.sample(true)); numberとstring以外の型がSampleAに定義されてないから使えない === 実行 class: a class: 1 ===
プロパティシグニチャ
プロパティ名とその型を定義するものです。これが定義されて、プロパティ名が同じで型が異なるものは作れない。
interface SampleA { property: string; } var a: SampleA = { property: "property sig."; }; console.log(a.property); === 実行 property sig. ===
コンストラクタシグニチャ
オブジェクト型にnew演算子が使えることを定義します。 implementsできないから、この形になったのかなー。 Javaにないからちょっと使うイメージが。
interface SampleA { new (x:string): SampleAImpl; } class SampleAImpl { constructor(private x: string){ } public echo():string { return this.x; } } var a: SampleA = SampleAImpl; var b: SampleAImpl = new a("Hello,Typescript."); console.log(b.echo()); === Hello,Typescript. ===
まぁ実践で使い方を覚えようかと思います。