#1 Language π/1-3 Typescript
[Typescript] μ λ€λ¦ Generic <T>
FillByCoding
2023. 12. 23. 16:50
λ°°μ΄ νμ
- μ΄λ€ νμ μ λ°μ΄ν°κ° μ μ₯λλ μκ΄νμ§ μμΌλ©°
- μ μ₯νλ μμκ° λ¬Έμμ΄ λͺ©λ‘, μ«μν λͺ©λ‘, κ°μ²΄ λͺ©λ‘, νΌν©λ λ°μ΄ν°μ λͺ©λ‘μ΄λ μκ΄νμ§ μμ§λ§ μ μ΄λ μ λ³΄κ° μ μ₯λλ κ²μΈμ§μ λν΄μλ νμΈ ν¨
μ λ€λ¦ νμ Generic <T>
- νμ μμ μ±κ³Ό κ²°ν©λ μ μ°μ±μ μ 곡
- μ λ¬νλ κ°μ΄λ ν΄λμ€μμ μ¬μ©νλ κ°μ μ μ°νκ² μ§μ ν μ μμ
- μΆκ°ν μ μ½ μ‘°κ±΄μ΄ μλ€λ©΄ κ·Έ μ‘°κ±΄λ§ μ€μνλ©΄ λ¨
const names: Array<string> = []; // string []
const names: Array<string | number> = []; // string [], number []
- promise νμ
const promise: Promise<string> = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("This is done!");
}, 2000);
});
promise.then(data => {
data.split(' ')
})
μ λ€λ¦ ν¨μ
function merge<T, U>(objA: T, objB: U) {
return Object.assign(objA, objB);
}
const mergedObj = merge({name: 'Max', hobbies: ['Sports']}, {age:30});
console.log(mergedObj.age);
μ μ½ μ‘°κ±΄ μ€μ νκΈ°
- μ μ½ μ‘°κ±΄μ μ¬μ©νλ©΄ μ λ€λ¦ ν¨μ λ±μ μ¬μ©ν μ μλ ꡬ체μ μΈ νμ μ λ²μλ₯Ό μ’ν μ μμ
function merge<T extends object, U extends object>(objA: T, objB: U) {
return Object.assign(objA, objB);
}
const mergedObj = merge({ name: "yumi", hobbies: ["Sports"] }, { age: 30 });
console.log(mergedObj);
- λ€λ₯Έ μΌλ° ν¨μ
interface Lengthy {
length: number;
}
function countAndDescribe<T extends Lengthy>(element: T) {
let descriptionText = "Got no value"; // κΈΈμ΄κ° μλ μμλ₯Ό μ λ¬νλ κ²½μ°
if (element.length === 1) {
descriptionText = "Got 1 element.";
} else if (element.length > 1) {
descriptionText = "Got " + element.length + "elements.";
}
return [element, descriptionText];
}
console.log(countAndDescribe(['Sports', 'Cooking']));
keyof
- keyof ν€μλλ₯Ό μ§λλ μ λ€λ¦ νμ μ μ¬μ©νμ¬ μ΄μ κ°μ μ νν ꡬ쑰λ₯Ό κ°κ³ μ νλ€λ κ²μ νμ μ€ν¬λ¦½νΈμκ² μλ €μ€
function extractAndConvert<T extends object, U extends keyof T>(
obj: T,
key: U
) {
return "Value: " + obj[key];
}
extractAndConvert({ name: "yumi" }, "name");
μ λ€λ¦ ν΄λμ€
- ν΄λμ€ λ΄λΆμμ μ¬μ©λλ λ°μ΄ν° νμμ λμ μΌλ‘ μ§μ ν μ μλ κΈ°λ₯μ μ 곡
- μ΄λ₯Ό ν΅ν΄ μ½λμ μ¬μ¬μ©μ±κ³Ό μ μ°μ±μ λμΌ μ μμ
// μ λ€λ¦ ν΄λμ€ μ μΈ
class Container<T> {
private value: T;
constructor(initialValue: T) {
this.value = initialValue;
}
// κ°μ μ€μ νλ λ©μλ
setValue(newValue: T): void {
this.value = newValue;
}
// νμ¬ κ°μ κ°μ Έμ€λ λ©μλ
getValue(): T {
return this.value;
}
}
// μ«μλ₯Ό μ μ₯νλ Container μΈμ€ν΄μ€ μμ±
const numberContainer = new Container<number>(42);
// λ¬Έμμ΄μ μ μ₯νλ Container μΈμ€ν΄μ€ μμ±
const stringContainer = new Container<string>("Hello, TypeScript!");
// μ¬μ© μμ
console.log(numberContainer.getValue()); // μΆλ ₯: 42
console.log(stringContainer.getValue()); // μΆλ ₯: Hello, TypeScript!
// κ° λ³κ²½
numberContainer.setValue(123);
stringContainer.setValue("Updated value");
console.log(numberContainer.getValue()); // μΆλ ₯: 123
console.log(stringContainer.getValue()); // μΆλ ₯: Updated value
partial νμ
interface CourseGoal {
title: string;
description: string;
completeUntil: Data;
}
function createCourseGoal(
title: string,
description: string,
data: Date
): CourseGoal {
let courseGoal: Partial<CourseGoal> = {};
courseGoal.title = title;
courseGoal.description = description;
courseGoal.completeUntil = date;
return courseGoal as CourseGoal;
}
μ λ€λ¦κ³Ό μ λμΈ νμ μ μ°¨μ΄
- μ λμΈ νμ
- ν¨μλ₯Ό νΈμΆν λλ§λ€ μ΄ νμ λ€ μ€ νλλ‘ νΈμΆν μ μλ ν¨μκ° νμν κ²½μ°μ μ¬μ©
- λͺ¨λ λ©μλ νΈμΆμ΄λ λͺ¨λ ν¨μ νΈμΆλ§λ€ λ€λ₯Έ νμ μ μ§μ νκ³ μ νλ κ²½μ° μ¬μ©
- μ λ€λ¦ νμ
- νΉμ νμ μ κ³ μ νκ±°λ, μ 체 ν΄λμ€ μΈμ€ν΄μ€μ κ±Έμ³ κ°μ ν¨μλ₯Ό μ¬μ©νκ±°λ, μ 체 ν¨μμ κ±Έμ³ κ°μ νμ μ μ¬μ©νκ³ μ ν λ μ λ€λ¦ νμ μ¬μ©
- ν νμ μΌλ‘ κ³ μ μν΄
- λ€μν νμ κ³Ό ν¨κ» μλνλ νμ μ μ¬μ©νλ κ²½μ° (μ: λ€λ₯Έ νμ μ λ°μ΄ν°λ₯Ό λ΄λ³΄λ΄λ κ°μ²΄)
LIST