Ad

ジェネリックの概要 anchor.png Edit

ジェネリックとは型の変数のような物。総称型、パラメタ付型などとも呼ばれる。 たとえば引数と戻り値の関数を考える。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{
    //何か処理
}
Page Top

ジェネリックの型 anchor.png Edit

型定義にもジェネリックは使える。

var func: <T>(n: T[])=>T = getThird;

こちらの書き方でも良い。

var func: {<T>(n: T[]):T} = getThird;

インターフェイスにも利用できる。

interface GenericGetThird {
    <T>(n: T[]):T;
}
Page Top

クラス定義でのジェネリック anchor.png Edit

クラス定義でもジェネリックは利用できる。

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));//エラー
Page Top

ジェネリックを継承で制限 anchor.png Edit

<T extends BaseClass>

と書くとTはBaseClassEditを継承した物で無ければエラーが出る。


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1598, today: 1, yesterday: 0
Princeps date: 2016-03-19 (Sat) 06:48:49
Last-modified: 2016-03-19 (Sat) 08:28:32 (JST) (2340d) by njf
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF