β μ¬μ μ μ μ
μ λ€λ¦μ C#, Java λ±μ μΈμ΄μμ μ¬μ¬μ©μ±μ΄ λμ μ»΄ν¬λνΈλ₯Ό λ§λ€ λ μμ£Ό νμ©λλ νΉμ§μ
λλ€.
νΉν, νκ°μ§ νμ
λ³΄λ€ μ¬λ¬ κ°μ§ νμ
μμ λμνλ μ»΄ν¬λνΈλ₯Ό μμ±νλλ° μ¬μ©λ©λλ€.
μ λ€λ¦(Generics) μ μ β
- μ λ€λ¦μ΄λ νμ μ λ§μΉ ν¨μμ νλΌλ―Έν°μ²λΌ μ¬μ©νλ κ²
β κΈ°λ³Έμ μΈ λ¬Έλ²
<T>
ν€μλ μ¬μ©
// JS ν¨μ μ¬μ© μ
function logText(text){
console.log(text);
return text;
}
logText(10); // μ«μ
logText('hello'); // λ¬Έμμ΄
logText(true); // μ§μκ°
// TS - μ λ€λ¦
function logText(text: T):T{
console.log(text);
return text;
}
logText('hello') // ν¨μλ₯Ό νΈμΆν λ νλΌλ―Έν°μ λν νμ
μ κ°μ΄ μ§μ νμ¬ μ λ¬
β λμ κ³Όμ μ μΈλΆν
- ν¨μμ μ λ¬
logText<string>('hello') // μΈμλ₯Ό λκΈ°λλ° μΈμμ νμ μ string
- μ λ¬ λ°μ ν
// ꡬ쑰
function logText<T>(text: T):T{
console.log(text);
return text;
}
// μλμ κ°μ΄ λμ λλ κ²μ²λΌ 보μΈλ€.
function logText(text: string):string{
console.log(text);
return text;
}
μ λ€λ¦μ μ¬μ©νλ©΄ μ’μ κ²½μ° β
β μ½λ μ€λ³΅ μ μΈμ λ¨μ
function logText(text: string){
console.log(text);
text.split('').reverse().join('');
return text;
}
logText('a');
logText(10);
logText(true);
- λ§μ½ λ°μ κ°λ€ μμλ€κ°
split
μ΄λΌλ λ¬Έμμ΄ API λ₯Ό μ¬μ©νκ³ μΆλ€λ κ°μ - κ²°κ΅ λ¬Έμμ΄λ§ λ°μ μ μλ ν¨μκ° λμ΄λ²λ¦½λλ€.
- 'a' λ₯Ό μ μΈν λλ¨Έμ§ 10, true λ λ°κ³ μΆμ§λ§ λ°μ§ λͺ» ν©λλ€.
- μ΄λ° μν©μ ν΄κ²°νκΈ° μν΄μ μλμ κ°μ΄ ν¨μλ₯Ό μμ±νλ©΄ λ©λλ€.
function logNumber(num: number){
console.log(num);
return num;
}
logNumber(10);
- λ¬Όλ‘ λ¬Έμ μμ΄ μ¬μ©ν μ μμ΅λλ€.
- νμ§λ§ μ μ§λ³΄μ κ΄μ μμλ μ’μ§ μμ΅λλ€. μ΄μ λ λ¨μν νμ
μ λ€λ₯΄κ² λ°κΈ° μν΄μ
μ€λ³΅λλ μ½λλ€μ μμ°νλ©΄, κ°λ μ± λΏλ§ μλλΌ μλ―Έμμ΄ μ½λκ° μ»€μ§κ² λ©λλ€.
μ΄λ° κ²½μ°, μ λμ¨ νμ μ νμ©νλ©΄ β
function logText(text: string | number){
console.log(text);
text. // string κ³Ό number λ λ€ μ κ·Ό κ°λ₯, νμ¬ νμ
μ string κ³Ό number
return text;
}
const a = logText('a');
console.log(a) // μ¬μ ν string κ³Ό number λ λ€ κ°μ§κ³ μμ΅λλ€.
a.split('') // μλ¬κ° λ°μν©λλ€.
logText(10);
- λ€μ΄κ°λ Input μ μν©μ ν΄κ²°μ΄ λ μ μμ΅λλ€.
- νμ§λ§, μ½λ μμμμ
text
μ νμ μ string κ³Ό number λ λ€ κ°μ§κ² λ©λλ€. - κ·Έ ν logText λ₯Ό μ΄μ©ν΄μ λ¬Έμμ΄μ μ§μ΄λ£κ³ λμ, λ¦¬ν΄ κ°μ λ°κ³ console.log λ‘ νμΈ νλ©΄
- μ¬μ ν string κ³Ό number λ λ€ κ°μ§κ³ μμ΅λλ€.
- λ¬Έμλ₯Ό λ£μμ§λ§,
split
API λ₯Ό μ¬μ©ν μ μμ΅λλ€. κ²°λ‘ μ μΌλ‘ a λ stringμ΄ μλλΌ string | number
νμ μ λλ€.- λ°ν κ°μ λ¬Έμ μ μ΄ μκΈ°κ² λ©λλ€.
β μ λ€λ¦μ μ¬μ©νλ©΄ λ¬Έμ μμ΄ μλν μ μλ€.
function logText<T>(text: T): T{
console.log(text);
return text;
}
//const str = logText('a');
const str = logText<string>('a');
str.split(''); // μλ¬κ° λ°μνμ§ μλλ€.
- μ λ€λ¦μ νμ μ μμ λν μ΄μ μ κ°μ Έκ°λλ€.
- μ½λλ₯Ό μ€λ³΅ μ μΈ ν νμ μμ΄ νμ
μ λΉμλμ μνμμ νμ
μ
μ΄λ€ νμ μ΄ λ€μ΄κ°μ§λ νΈμΆνλ μμ μμ μ μνλ κ² - λν νμ μ μΆλ‘ μ νμ¬ μ΅μ’ λ°ν κ°κΉμ§ λΆμΌ μ μλ κ² μ λ€λ¦ μ λλ€.
μΈν°νμ΄μ€μ μ λ€λ¦μ μ μΈνλ λ°©λ² β
β μΈν°νμ΄μ€ μ μΈ
interface Dropdown{
value: string;
selected: boolean;
}
const obj: Dropdown = { value: `abc`, selected: false};
β μΈν°νμ΄μ€ + μ λ€λ¦
interface Dropdown<T>{
value: T;
selected: boolean;
}
const obj: Dropdown<string> = {value: 'abc', selected: false};
//const obj: Dropdown<Number> = {value: 'abc', selected: false}; // value νμ
μλ¬ λ°μ
β μ λ€λ¦μ νμ μ ν
function logTextLenght<T>(text: T): T {
console.log(text.length)
// μλ¬, νμ
μ€ν¬λ¦½νΈ μ
μ₯μμλ logTextLenghtμ μ΄λ€ νμ
μ΄ λ€μ΄μ¬μ§ μμΈ‘ν μ μκΈ° λλ¬Έμ
// κ°λ°μλ§ μλ μ¬μ€
return text;
}
logTextLenght('hi');
- μλ μ²λΌ μμ±
function logTextLenght<T>(text: T[]): T[] {
// ν¨μ λ΄λΆ μμμ λ°°μ΄μμ μ μ μλ€.
console.log(text.length)
text.forEach(function (text){ }); return text;
}
β μ λ€λ¦ νμ μ ν 2 - μ μλ νμ μ΄μ©νκΈ°
interface LenghtType {
lenght: number;
}
function logTextLenght(text: T): T{
text.lenght;
return text;
}
logTextLenght(10); // μ€λ₯, μ«μλ `lengh` κ° μ 곡 λμ§ μμ΅λλ€.
logText({ length: 0, value: 'hi' }); // `text.length` μ½λλ κ°μ²΄μ μμ± μ κ·Όκ³Ό κ°μ΄ λμνλ―λ‘ μ€λ₯ μμ
β μ λ€λ¦μ νμ μ ν 3 - keyof
interface ShoppingItem {
name: string;
price: number;
stock: number;
}
// shoppingItem μ μλ key λ€ μ€μ ν κ°μ§κ° μ λ€λ¦μ΄ λλ€.
// μ¦, getShoppingItemOption μ νλΌλ―Έν°λ‘λ 'name', 'price', 'stock' μ€ ν κ°μ§λ§ λ€μ΄ κ° μ μλ€.
function getShoppingItemOption(itemOption: T): T {
return itemOption;
}
getShoppingItemOption("name")
// getShoppingItemOption(10); // μλ¬ λ°μ
// getShoppingItemOption('a'); // μλ¬ λ°μ
μ°Έκ³
'π Front-End > TypeScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νμ λ¨μΈ(Type Assertion) (0) | 2022.10.23 |
---|---|
νμ μΆλ‘ (Type Inference) (0) | 2022.10.23 |
νμ μ€ν¬λ¦½νΈμ ν΄λμ€ (0) | 2022.10.23 |
Enum ( μ΄λ ) (0) | 2022.10.22 |
Union Type ( μ λμ¨ νμ ) κ³Ό Intersection Type (0) | 2022.10.22 |