typescirptのジェネリックの実際の使用法はわかりません。実際のタイプコピーのジェネリックの使用
上記の例では、インターフェイスcを関数CalcAverageAgeに渡しています。
しかし、ICustomerを使用せずに、そのクラス内に年齢と名前を使用することはできません。
次に、関数内でテンプレート(c)を渡すことは何ですか? 我々は直接
function CalcAverageAge(cust1: ICustomer, cust2: ICustomer): number
{
return (cust1.age + cust2.age)/2;
}
あなたはジェネリックは本当に便利です実際の例を与えることができ、以下の形式でコードを書くことができますか?
ジェネリックスを使用する必要がある私のシナリオについて説明します。
interface t1{
a:String
b:number
}
interface t2 {
a:String
b:number
c:number
}
interface t3 {
a:String
b:number
d:number
}
class base<T extends t1> {
constructor(input : T, type:string){
//some common code for both derived1 and derived2
if(type==="derived1"){
console.log(input.c);// will throw error because t1 doesn't contains c
} else if (type==="derived2"){
console.log(input.d);// will throw error because t1 doesn't contains d
}
}
}
class derived1 extends<t2>{
constructor(){
var temp = {a:"11",b:2,c:3}
super(temp,"derived1");
}
class derived2 extends<t3>{
constructor(){
var temp = {a:"11",b:2,d:3}
super(temp,"derived2");
}
}
generisでこれを達成できますか?
重複したコードを避けて実装する最良の方法は何でしょうか。
編集した質問では、達成したいことは不明です。このアーキテクチャの目標は何ですか? '.c'と' .d'は、それらのプロパティが存在することを示す情報を 'base'クラスに与えていないので、アクセスできなくなります。あなたが望むものがアクセス可能なこれらのプロパティの場合、これは間違ったデザインであり、達成するための適切な答えを得るために実際に何をしたいのかについてのより多くの情報が必要です。 – Nypan