
βνμ μ λμ€μ μ νλ ν¨μ/νμ β μ¦, μ λ€λ¦ = "μμ" λΌκ³ μκ°νκΈ°
ν¨μκ° μλλΌ "νμ μμ€ν " π μ€νμ΄ μλλΌ νμ 체ν¬μ©
function box<T>(item: T): T {
return item;
}
π μλ―Έ
β μ¬κΈ°μ = νμ λ³μ (μμ νμ )
κΈ°μ‘΄ λ°©μ β
function func(value: any) {
return value;
}
π λ¬Έμ : any μ°λ©΄ νμ μ 보 λ€ μ¬λΌμ§
μ λ€λ¦ μ¬μ© β
let appleBox = box("apple"); // string
let numberBox = box(100); // number
let boolBox = box(true); // boolean
π ν΅μ¬
λ£λ κ°μ λ°λΌ νμ
μ΄ μλμΌλ‘ λ°λ -> μλμΌλ‘ νμ
λ§μΆ°μ€ (νμ
μΆλ‘ )
π ν¨μ νΈμΆν λ νμ μ΄ κ²°μ λ¨
func<number>(10)
func<string>("hello")
π 보ν΅μ μλ μΆλ‘ λ¨
func(10) // number μλ
let arr = func([1, 2, 3]); // number[]
π κ·Έλ₯ μ«μ λ°°μ΄
let arr2 = func<[number, number, number]>([1, 2, 3]);
π μλ―Έ
κΈΈμ΄ = 3κ° κ³ μ
μμκΉμ§ κ³ μ
π μ μ°λ?
π βμ ννκ² κ΅¬μ‘°λ₯Ό μ§ν€κ³ μΆμ λβ
π νν β κΈΈμ΄κΉμ§ κ³ μ λ¨
function swap<T, U>(a: T, b: U) {
return [b, a];
}
swap("1", 2) // [2, "1"]
let result = swap("컀νΌ", 5000);
π κ²°κ³Ό
[5000, "컀νΌ"]
π μλ―Έ
T = string
U = number
function first<T>(data: [T, ...unknown[]]) {
return data[0];
}
π ν΅μ¬
[T, ...unknown[]] = 첫λ²μ§Έλ T, λλ¨Έμ§λ μ무거λ
first(["μ¬κ³Ό", "λ°λλ"]); // "μ¬κ³Ό"
first([10, 20, 30]); // 10
first([1, "hello", true])
π T = number | string | boolean β
π νν μ°λ©΄
π 첫 λ²μ§Έ κ° κΈ°μ€μΌλ‘ νμ
κ³ μ
function getLength<T extends { length: number }>(data: T) {
return data.length;
}
π μλ―Έ
length μλ μ λ§ λ°μλΌ
getLength([1,2,3]) // κ°λ₯
getLength("hello") // κ°λ₯
getLength(10) // β μλ¬
function map<T, U>(arr: T[], callback: (item: T) => U) {
let result: U[] = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]));
}
return result;
}
π μμ
map([1,2,3], (x) => x * 10)
// [10, 20, 30]
map(["a","b"], (x) => x + "π")
// ["aπ", "bπ"]
interface MyMap<V> {
[key: string]: V;
}
let scores: MyMap<number> = {
math: 100,
english: 90
};
π ν΅μ¬
keyλ string, valueλ λ΄κ° μ ν¨
| νμ | μλ―Έ |
|---|---|
| T | μ λ ₯ νμ |
| U | κ²°κ³Ό νμ |
function forEach<T>(arr: T[], callback: (item: T) => void) {
for (let i = 0; i < arr.length; i++) {
callback(arr[i]);
}
}
forEach([1,2,3], (x) => {
console.log(x);
});
π λ°νκ° μμ β void
interface Data<K, V> {
key: K;
value: V;
}
let user: Data<string, number> = {
key: "age",
value: 20
};
interface Map<V> {
[key: string]: V;
}
let stringMap: Map<string> = {
a: "hello"
};
π value νμ λ§ λ°κΏ μ μμ
class Box<T> {
constructor(private items: T[]) {}
add(item: T) {
this.items.push(item);
}
}
let numberBox = new Box<number>([1,2]);
numberBox.add(3);
let stringBox = new Box<string>(["a"]);
stringBox.add("b");
π ν΄λμ€λ νμ λ°λ
const promise = new Promise<number>((resolve) => {
resolve(100);
});
π μλ―Έ
resolve κ²°κ³Ό νμ = number
promise.then(res => {
res *2 // κ°λ₯
});
interface Post {
id: number;
title: string;
}
function fetchPost(): Promise<Post> {
return new Promise((resolve) => {
resolve({
id: 1,
title: "κ²μκΈ"
});
});
}