๐Ÿ“’[TypeScript ๋งˆ์Šคํ„ฐ with Webpack & React] Step12.์ œ๋„ค๋ฆญ

๊ถŒ์šฉ์ค€ยท2023๋…„ 12์›” 6์ผ
0
post-thumbnail

1. ์ œ๋„ค๋ฆญ ๊ฐœ์š”


์ œ๋„ค๋ฆญ์€ ์—ฌ๋Ÿฌ ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฌ์‚ฌ์šฉ ํ•จ์ˆ˜๋‚˜ ์žฌ์‚ฌ์šฉ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํŠน์ˆ˜ ๊ตฌ๋ฌธ์ด๋‹ค.

์ž…๋ ฅ ํƒ€์ž…์— ๋”ฐ๋ผ ๊ทธ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•œ๋‹ค.


interface Cat{
    name:string;
    age: number;
}

function identity<T>(item: T): T{
    return item;
}

identity<number>(5);
identity<string>("hi");
identity<Cat>({name : 'miya', age: 5})

2. ๋‹ค๋ฅธ ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜ ์ž‘์„ฑํ•˜๊ธฐ



function getRandom<T>(list: T[]): T {
    const randIdx = Math.floor(Math.random() * list.length);
    return list[randIdx];
}

getRandom<string>(["a","b","c"]);
getRandom<number>([32,12,4,6]);

3. ์ถ”๋ก ๋œ ์ œ๋„ค๋ฆญ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ


์ œ๋„ค๋ฆญ ํ•จ์ˆ˜์— ํƒ€์ž…์„ ์„ ์–ธํ•˜์ง€์•Š์•„๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜น์€ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.


function getRandom<T>(list: T[]): T {
    const randIdx = Math.floor(Math.random() * list.length);
    return list[randIdx];
}

getRandom(["a","b","c"]);
getRandom([32,12,4,6]);

4. ์ œ๋„ค๋ฆญ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋ฐ TSX ํŒŒ์ผ


tsx : TypeScript๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” JSX ํŒŒ์ผ
JSX์—์„  javascript์— HTML ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ญ์ƒ ํ™‘ํ™”์‚ด๊ด„ํ˜ธ('<')๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค
์ œ๋„ค๋ฆญ์—๋„ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค

TSX ํŒŒ์ผ๋กœ ์ž‘์—…ํ•˜๋ฉด์„œ ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜์ธ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋• ํ›„ํ–‰ ์‰ผํ‘œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


const getRandom = <T,>(list: T[]): T =>{
    const randIdx = Math.floor(Math.random() * list.length);
    return list[randIdx];
}

5. ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๊ฐ€์ง„ ์ œ๋„ค๋ฆญ


๋‘ ๊ฐœ์ด์ƒ์˜ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ–์„ ์ˆ˜๋„ ์žˆ๋‹ค.

function merge<T,U>(object1:T, object2:U){
    return {
        ...object1,
        ...object2
    }
}

const comboObj = merge({name: "colt"}, {pets: ["blue","elton"]});

6. ํƒ€์ž… ์ œํ•œ ์ถ”๊ฐ€ํ•˜๊ธฐ


extends๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ์ œํ•œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
function merge<T extends Object,U extends Object>(object1:T, object2:U){
    return {
        ...object1,
        ...object2
    }
}
const comboObj = merge({name: "colt"}, {num: 9});


interface Length{
    length : number;
}

function printDoubleLength<T extends Length>(thing: T): number{
    return thing.length * 2;
}

7. ๊ธฐ๋ณธ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ


์ œ๋„ค๋ฆญ์— ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


function makeEmptyArray<T = number>(): T[]{
    return [];
}

const nums = makeEmptyArray(); // ๊ธฐ๋ณธ ํƒ€์ž…๊ฐ’์ด number์ด๊ธฐ ๋•Œ๋ฌธ์— number๋กœ ์ธ์‹
const bools = makeEmptyArray<boolean>();

8. ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค ์ž‘์„ฑ


ํด๋ž˜์Šค์— ํฌํ•จ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํƒ€์ž…์„ ๊ฐ–๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
interface Song{
    title: string;
    artist: string;
}

interface Video{
    title: string;
    creator: string;
    resolution: string;
}

class PlayList<T>{
    public queue: T[] = [];
    add(el: T){
        this.queue.push(el);
    }
}

const songs = new PlayList<Song>();

const Videos = new PlayList<Video>();
profile
Brendan Eich, Jordan Walke, Evan You, ๊ถŒ์šฉ์ค€

0๊ฐœ์˜ ๋Œ“๊ธ€