ページ内コンテンツ
ジェネリックの概要
ジェネリックとは型の変数のような物。総称型、パラメタ付型などとも呼ばれる。 たとえば引数と戻り値の関数を考える。number型なら、
function testFunction(n:number):number{ return n; }
となる。
引数と戻り値が同じという条件のみ課したいが、
function testFunction(n:any):any{ return n; }
としてしまうとそうはならない。
そこで、ジェネリックを使う。
function testFunction<T>(n:T):T{ return n; }
使うときは、「<T>」の部分に型を入れる。
console.log(testFunction<number>(2)); // => 2 console.log(testFunction<string>("string")); // => string
つまり、あたかも型を変数のように扱っている。
この例だとあまりありがたみが無い。しかし、次のようにたとえば配列の三番目(つまり添え字が2)の要素を返す関数を考えてみると利点がわかる。
function getThird<T>(n:T[]):T{ return n[2]; } console.log(getThird<number>([1,2,3,4])); // => 3 console.log(getThird<string>(["one","two","three","four"])); // => three
このような配列の要素を返したり、引数の配列を返したりする場合には、ジェネリックは任意の型に対して整合性をチェックできる。
二つ以上のジェネリックを定義するときは、「<>」の中にコンマ区切りで列記する
function testFunc<U,T>(U,T):U{ //何か処理 }
ジェネリックの型
型定義にもジェネリックは使える。
var func: <T>(n: T[])=>T = getThird;
こちらの書き方でも良い。
var func: {<T>(n: T[]):T} = getThird;
インターフェイスにも利用できる。
interface GenericGetThird { <T>(n: T[]):T; }
クラス定義でのジェネリック
クラス定義でもジェネリックは利用できる。
class TestClass<T>{ x:T; concat(x:T,y:T):T[]{ this.x = x; return [x,y]; } } var numCat:TestClass<number> = new TestClass<number>(); var strCat:TestClass<string> = new TestClass<string>(); console.log(numCat.concat(1,2));// => [1,2] console.log(numCat.x);// => 1 console.log(strCat.concat("one","two"));// => ["one","two"] console.log(strCat.x);// => "one" console.log(strCat.concat(1,2));//エラー
ぺージ情報 | |
---|---|
ぺージ名 : | TypeScriptのジェネリック |
ページ別名 : | 未設定 |
ページ作成 : | njf |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
Counter: 1978,
today: 1,
yesterday: 0
初版日時: 2016-03-19 (土) 06:48:49
最終更新: 2016-03-19 (土) 08:28:32 (JST) (2922d) by njf