ν μ ν¬κΈ°λ‘ μλΌλ¨Ήλ νμ μ€ν¬λ¦½νΈ(TypeScript) κ°μ | μ΄μ ν Winterlood - μΈνλ°
μ΄μ ν Winterlood | , νλ‘ νΈμλμ νΌν μ μλ λμΈ νμ μ€ν¬λ¦½νΈ,μ΄μ λ μ λλ‘ μ 볡ν λκ° μμ΅λλ€! π [μ¬μ§]μΈνμ½ 2023 'νμ μ€ν¬λ¦½νΈλ μ κ·Έλ΄κΉ?' λ°νμμ κ°μμ λλ€. π§ λ°°μ
www.inflearn.com
π μ λ€λ¦ μκ°
// β
μ λ€λ¦ ν¨μ (Generic Function)
// ν¨μμ λ§€κ°λ³μμ λ°νκ°μ νμ
μ μ μ°νκ² μ²λ¦¬ν μ μλλ‘ ν΄μ€
function func<T>(value: T): T {
return value;
}
// μ¬μ© μμ
let num = func(10);
let bool = func(true);
let str = func("string");
// Tλ₯Ό [number, number, number] ννλ‘ μ§μ μ§μ ν μμ
let arr = func<[number, number, number]>([1, 2, 3]);
π νμ λ³μ μμ©νκΈ°
// β
μ λ€λ¦ νμ
λ³μ μμ©
// μ¬λ‘ 1: νμ
λ³μλ₯Ό 2κ° μ¬μ©νλ κ²½μ°
// → μλ‘ λ€λ₯Έ νμ
μ λ κ°μ λ°μ μμλ₯Ό λ°κΏ λ°ννλ ν¨μ
function swap<T, U>(a: T, b: U) {
return [b, a];
};
const [a, b] = swap("1", 2);
// μ¬λ‘ 2: λ°°μ΄μ λ°μ 첫 λ²μ§Έ κ°μ λ°ννλ ν¨μ
// → μΌλ°μ μΈ λ°°μ΄ νμ
μ λ°μ 첫 λ²μ§Έ μμ λ°ν
function returnFirstValue<T>(data: [T, ...unknown[]]) {
return data[0];
}
let num = returnFirstValue([0, 1, 2]);
let str = returnFirstValue([1, "hello", "my", "name", "is"]);
// μ¬λ‘ 3: νμ
μ ν (Constraint)
// → length νλ‘νΌν°λ₯Ό κ°μ§ νμ
λ§ λ°μ μ μλλ‘ μ ν
function getLength<T extends { length: number }>(data: T) {
return data.length;
}
let var1 = getLength([1, 2, 3]);
let var2 = getLength("12345");
let var3 = getLength({length: 10});
π map, forEach λ©μλ νμ μ μνκΈ°
// β
map λ©μλ
// λ°°μ΄μ κ° μμμ μ½λ°± ν¨μλ₯Ό μ€νν κ²°κ³Όλ₯Ό μ λ°°μ΄λ‘ λ§λ€μ΄ λ°ν
const arr = [1, 2, 3];
const newArr = arr.map((it) => it * 2);
function map<T, U>(arr: T[], callback: (item: T) => U) {
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]));
}
return result;
}
map(arr, (it) => it * 2);
map(["hi", "hello"], (it) => it.toUpperCase());
map(["1", "2", "3"], (it) => parseInt(it));
// β
forEach λ©μλ
// λ°°μ΄μ κ° μμμ λν΄ μ½λ°± ν¨μλ₯Ό μ€ννμ§λ§ κ°μ λ°ν X
const arr2 = [1, 2, 3];
arr2.forEach((it) => console.log(it));
function forEach<T>(arr: T[], callback: (item: T) => void) {
for (let i = 0; i < arr.length; i++) {
callback(arr[i]);
}
}
forEach(arr2, (it) => {
console.log(it.toFixed());
});
forEach(["123", "456"], (it) => {
it;
})
π μ λ€λ¦ μΈν°νμ΄μ€ & μ λ€λ¦ νμ λ³μΉ
// β
μ λ€λ¦ μΈν°νμ΄μ€
interface KeyPair<K, V> {
key: K;
value: V;
};
// μ¬μ© μμλ λ°λμ κΊ½μ (<>)λ₯Ό μ¬μ©νμ¬ νμ
μ λͺ
μ
let keyPair: KeyPair<string, number> = {
key: "key",
value: 0,
};
let keyPair2: KeyPair<boolean, string[]> = {
key: true,
value: ["1", "2"],
};
// β
μΈλ±μ€ μκ·Έλμ²μ μ λ€λ¦ μΈν°νμ΄μ€
// κΈ°μ‘΄ λ°©μ: κ° νμ
μ΄ κ³ μ λ κ°μ²΄
interface OriginalMap {
[key: string]: number;
};
let originalMap: OriginalMap = {
key: 1,
key2: 2
};
// μ λ€λ¦ λ°©μ: value νμ
μ μ μ°νκ² μ€μ κ°λ₯
interface GenericMap<V> {
[key: string]: V;
};
let genericMap: GenericMap<string> = {
key: "value",
};
let genericMap2: GenericMap<boolean> = {
key: true,
};
// β
μ λ€λ¦ νμ
λ³μΉ
// μΈν°νμ΄μ€μ κ±°μ λμΌν ꡬ쑰μ§λ§ type ν€μλλ‘ μ μ
type MyMap<V> = {
[key: string]: V;
};
let myMap: MyMap<string> = {
key: "hello",
}
π μ λ€λ¦ ν΄λμ€
// β
μ λ€λ¦ ν΄λμ€
class List<T> {
constructor(private list: T[]) {}
push(data: T) {
this.list.push(data);
}
pop() {
return this.list.pop();
}
print() {
console.log(this.list);
}
};
const numberList = new List([1, 2, 3]);
numberList.pop();
numberList.push(4);
numberList.print();
const stringList = new List(["1", "2"]);
stringList.push("hello");
π νλ‘λ―Έμ€μ μ λ€λ¦
// β
Promise
// μλ°μ€ν¬λ¦½νΈμμ Promiseλ λΉλκΈ° μμ
μ μ²λ¦¬ν λ μ¬μ©νλ κ°μ²΄μ΄λ©°,
// νμ
μ€ν¬λ¦½νΈμμλ Promiseκ° μ λ€λ¦μΌλ‘ ꡬνλμ΄ μμ΄ κ²°κ³Όκ°μ νμ
μ λͺ
νν μ§μ κ°λ₯
// μλ μμ μμλ 3μ΄ νμ μ«μ 20μ λ°ννλ Promiseλ₯Ό μμ±
// resolveλ μμ
μ΄ μ±κ³΅νμ λ νΈμΆλλ©°, rejectλ μ€ν¨ μ νΈμΆ
const promise = new Promise<number>((resolve, reject) => { // <>λ₯Ό ν΅ν΄ λ°ν νμ
μ μ
setTimeout(() => {
resolve(20); /// μ±κ³΅ μ μ«μ 20μ μ λ¬
reject("μ€ν¨ μ΄μ "); // μ€ν¨ μ μλ¬ λ©μμ§λ₯Ό μ λ¬
}, 3000);
});
promise.then((response) => { // .then()μ μ±κ³΅ κ²°κ³Όλ₯Ό μ²λ¦¬
console.log(response * 10);
})
promise.catch((err) => {
if (typeof err === "string") {
console.log(err);
}
})
// β
Promiseλ₯Ό λ°ννλ ν¨μ μ μ
interface Post {
id: number;
title: string;
content: string;
};
function fetchPost(): Promise<Post> {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
id: 1,
title: "κ²μκΈ μ λͺ©",
content: "κ²μκΈ μ»¨ν
μΈ ",
})
}, 3000);
});
}
const postRequest = fetchPost();
postRequest.then((post) => {
console.log("κ²μκΈ ID:", post.id);
console.log("κ²μκΈ μ λͺ©:", post.title);
console.log("κ²μκΈ λ΄μ©:", post.content);
});
β¬οΈ λ€μ λ΄μ©μ μλ κΈμ μ°Έκ³
μΈνλ° κ°μ - ν μ ν¬κΈ°λ‘ μλΌλ¨Ήλ νμ μ€ν¬λ¦½νΈ (νμ μ‘°μνκΈ°)
ν μ ν¬κΈ°λ‘ μλΌλ¨Ήλ νμ μ€ν¬λ¦½νΈ(TypeScript) κ°μ | μ΄μ ν Winterlood - μΈνλ°μ΄μ ν Winterlood | , νλ‘ νΈμλμ νΌν μ μλ λμΈ νμ μ€ν¬λ¦½νΈ,μ΄μ λ μ λλ‘ μ 볡ν λκ° μμ΅λλ€! π [μ¬μ§]
isliife2.tistory.com