generic-3トップ2 generic

9983 ワード

TOC


2つの普通の

1.一つ屋根二つgeneric


jsまたはreactjsで役立つmap APIを知っていれば、
この点を直接実現することは可能である.
関数の汎用性のためにgenericのtypeScriptのmapを使う
どんな形になるか予想して
function map<T>(array:T[], f:(item:T)=>T):T[]{
	let result=[];
  	for( let i=0; i< array.length; i++){
      result[i]=f(array[i])
    }
  return result;
}
genericがまだ気まずいなら、こんな感じのコードが考えられるかもしれません.
しかし、これは問題があります.
デフォルトではmapは関数を受信し、インデックスごとにコールバック関数を実行します.
適用された関数が返されます.
ただし、上のmap関数はcallback関数であり、以降の処理が完了すると
入力型T型を使用しています.すなわち,戻り値resultはTタイプである.
たとえば、このmap関数は上記のコードに適していません.
function map<T>(array:T[], f:(item:T)=>T):T[]{
	let result=[];
  	for( let i=0; i< array.length; i++){
      result[i]=f(array[i])
    }
  return result;
}
const lap=map(['a','b','c'],_=>_==='a');
console.log('lap: ',lap)

私が言いたいのはgenericを使う意味がないということです.

どうしようかな。🤷🏻‍♂️


解決策は1つの屋根に2つのgenericを使用することである.
コードを次のように変更します.
function map<T,U>(array:T[],f:(item:T)=>U):U[]{
	let result=[];
	for(let i=0;i<array.length;i++){
		result[i]=f(array[i])
	}
	return result
}
問題を解決する方法はgenericを利用することではない.
generic変数をもう一つ書きます.
コールバック関数によって処理される値は、Tタイプであってもよい.
違うかもしれません.ではgenericをもう一つ書けばいいです.
const lap=map(['a','b','c'],_=>_==='a');
console.log('lap: ',lap);

その後はこのように並んで返却します.
もちろん、地図で名前を付けることはできません.陰影を起こすので、悪い名前です.
要するに,このように2つのgenericを用いることを理解した.
もし何かが詰まっていたら、もう一つ書いたらどうですか.