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");
}
}
우리는 generice로 이것을 얻을 수 있습니까?
중복 코드를 피하는 가장 좋은 방법은 무엇이 아닌가?
편집 한 질문에서 달성하고자하는 것이 분명하지 않습니다. 이 아키텍처의 목표는 무엇입니까? '.c'와'.d'는 당신이'base' 클래스에게 그 속성이 존재한다는 정보를주지 않기 때문에 접근 할 수 없습니다. 당신이 바라는 것은 접근 할 수있는 속성들에 대한 것이고 이것은 틀린 설계이며 우리는 당신이 실제로 그것을 달성하는 방법에 대해 괜찮은 대답을 줄 수 있기를 원하는 것에 대한 더 많은 정보를 필요로합니다. – Nypan