728x90
반응형
class ArrayOfNumbers {
constructor(public collection: number[]) {}
get(index: number): number {
return this.collection[index];
}
}
class ArrayOfStrings {
constructor(public collection: string[]) {}
get(index: number): string {
return this.collection[index];
}
}
//Generic을 적용함
class ArrayOfAnything<T> {
constructor(public collection: T[]) {}
get(index: number): T {
return this.collection[index];
}
}
const arr = new ArrayOfAnything(['a', 'b', 'c']);
///////////////////////
function printStrings(arr: string[]): void {
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
function printNumbers(arr: number[]): void {
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
//Generic을 적용함
function printAnything<T>(arr: T[]): void {
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
}
printAnything<string>(['a', 'b', 'c']);
///////////////////////
//Generic Constraints
class Car {
print() {
console.log('I am a car');
}
}
class House {
print() {
console.log('I am a house');
}
}
interface Printable {
print(): void;
}
function printHousesOrCars<T extends Printable>(arr: T[]): void { // Printable를 상속하는 T만 오도록 제한한 것
for (let i = 0; i < arr.length; i++) {
arr[i].print();
}
}
printHousesOrCars<House>([new House(), new House()]);
printHousesOrCars<Car>([new Car(), new Car()]);
728x90
반응형
'개발공부 일지 > 자바스크립트' 카테고리의 다른 글
타입스크립트)데코레이터 (0) | 2023.10.09 |
---|---|
자바스크립트)Symbol (0) | 2023.10.08 |
자바스크립트) 객체의 참조 VS 얕은 복사 VS 깊은 복사 (0) | 2023.10.02 |
자바스크립트) map과 filter차이 (0) | 2023.06.22 |
자바스크립트) 자바스크립트 데이터 전송 및 post 데이터 받기 (0) | 2021.12.29 |
댓글