Typescript
νμ μ€ν¬λ¦½νΈ - Generic (μ λ€λ¦)
hyo.loui
2023. 1. 19. 16:50
π―λͺ©μ :
TS Generic (μ λ€λ¦), μ 리 λ° λ³΅μ΅
1. μ λ€λ¦ μ΄λ?
μ λ€λ¦μ νμ μ λ§μΉ ν¨μμ νλΌλ―Έν°μ²λΌ μ¬μ© νλ κ²μ΄λ€
λ§λ‘λ§ νλ©΄ κ°μ΄ μ μμ€κ³ μ΄ν΄κ° μλλ€.
νμ§λ§ νλΌλ―Έν°μ μκΉμμ λμ‘°ν΄μ λ¨Έλ¦Ώμμ λ μ¬λ €μΌ μ΄ν΄κ° μ λλ€
// Generic
function generic<T>(any: T): T {
return any;
}
generic<number>(1); // 1
generic<string>("1"); // "1"
generic<boolean>(true); // true
function ν¨μλͺ <T>
μ¬κΈ° <T>λ₯Ό λ°λΌμ νμ μ΄ μ λ¬λκ³
νλΌλ―Έν°μ ν¨μνμ
: T μ μ λ¬λλ€!
2. μ λ€λ¦ νμ©
1. getIteArray λ λ°°μ΄(νλΌλ―Έν°)μμ, index(νλΌλ―Έν°)λ²μ§Έμ μλ κ²μ μ°Ύλ ν¨μ
2. pushItemArray λ λ°°μ΄(νλΌλ―Έν°)μ item(νλΌλ―Έν°)λ‘ λ€μ΄μ¨ κ°μ μΆκ°(push)ν΄μ£Όλ ν¨μ
function getItemArray<T>(arr: T[], index: number): T {
return arr[index];
}
function pushItemArray<T>(arr: T[], item: T): void {
arr.push(item);
}
const nums = [1, 2, 3, 4];
const techStack = ["js", "react", "redux"];
getItemArray(nums, 3); // 4
pushItemArray(nums, 5); // [1,2,3,4,5]
getItemArray(techStack, 2); // "redux"
pushItemArray(techStack, "RTK"); // ["js", "react", "redux", "RTK"]
3. μ λ€λ¦ νμ λ³μ
2κ°μ§ μμ λ₯Ό 보며 μκ°ν΄λ³΄μ
// μ λ€λ¦ νμ
λ³μ
function printout<T>(input: T): T[] {
console.log(input.length); // Error νλΌλ―Έν°λ‘ λ€μ΄μ€λ νμ
μ΄ arrayκ° μλκΈ° λλ¬Έμ .lengthκ° νμ©μ΄ μλλ€
return input;
}
function printout<T>(input: T[]): T[] {
console.log(input.length);
return input;
}
printout<number>([1, 2, 3, 4]); // 4
μλ¬ μμ΄ μ μ μλνλ€!
4. μ λ€λ¦ μ μ½ μ‘°κ±΄
// μ λ€λ¦ μ μ½ μ‘°κ±΄
interface LengthWise {
length: number;
}
function printOutt<T extends LengthWise>(input: T): T {
console.log(input.length);
return input;
}
// printOutt(19); // Error, μ«μ νμ
μλ `length`κ° μ‘΄μ¬νμ§ μμΌλ―λ‘ μ€λ₯ λ°μ
const test = printOutt({ length: 4, value: "hi" }); // `input.length` μ½λλ κ°μ²΄μ μμ± μ κ·Όκ³Ό κ°μ΄ λμνλ―λ‘ μ€λ₯ μμ
console.log("ππ test", test);
// 4
// ππ test { length: 4, value: 'hi' }
μ΅μ’ μ 리
- μ λ€λ¦μ μ¬μ©νλ©΄ ν¨μμ νλΌλ―Έν° μ²λΌ μ¬μ©μ΄ κ°λ₯νλ€!
- <T>λ‘ μ λ¬λ°μ T μμ νμ© κ°λ₯νλ€.
- μ λ€λ¦ νμ λ³μλ‘ T[ ] λ‘ λ§λ€λ©΄ λ°°μ΄νμ μ΄ λλ€.
- μ μ½μ‘°κ±΄μΌλ‘ extendsλ₯Ό νμ©ν΄ νλΌλ―Έν° νμ μ μΆκ°ν μ μλ€.