質問: _allLength + item.getLength(); } ``` これらが結果は同じになると思うのですがGenericsの使い方として合っているのかや考え方はこのような感じでいいのかなどイマイチ掴めていないのでこちらの投稿させていただきました よろしくお願いします
回答: ActionScriptの類似機能 > > (ActionScript3でのinterfaceとの違いやメリットが解らない?同じようなものなのか、全く違うものなのか) > > > 私はActionScriptは解りませんが、一般論で言うとインターフェースとジェネリクスは全く違うものです。 想像ですが、ActionScriptにジェネリクスに相当する機能が無いのであれば、ActionScriptからは離れて、ジェネリクスが有る言語の解説書で理解するのが早そうです。 それでもあえて、ジェネリクスに似ているActionScriptの機能を挙げるならVectorの型パラメーターだと思います。 * ActionScriptでは `Vector.` として 要素がT型であるVectorを示すようです。 * TypeScriptでは `Array` (もしくは `T[]` )で要素がT型である配列を示します。 これはジェネリクスの代表的な例です。 質問の例ではジェネリクスの必要が無い 質問の例に関してはジェネリクスを使う必要は無く、ActionScriptのコード例と同じように、インターフェース型の引数を取ればよいです。 ``` // ActionScript の例に合わせ値を戻すなら return が必要で数値の型は number です function addLength(x: SomeItem): number { return _allLength += x.getLength() } ``` ジェネリクスが役立つケース ジェネリクスの解説となるとそれなりのボリュームになると思うので、書籍などを参照するのがよいと思いますが、もっとも単純な例として、公式ドキュメントにも有る引数をそのまま返す関数を挙げておきます。 ``` function identity(arg: T): T { return arg } ``` このような単純なケースでも、ジェネリクスを使用しないならば、以下のいずれかが必要になるでしょう。 * コンパイル時型チェックの恩恵を捨てるコード(any型、あるいは型キャストの使用) * 実行時の型チェック * 型だけ違う実装の大量生産 逆に言うと、上記のいずれかを行ない苦労している際にはジェネリクスの利用で楽ができる可能性があるということです。