Front-End/TypeScript

νƒ€μž…μŠ€ν¬λ¦½νŠΈ[TypeScript] | νƒ€μž… λ¦¬ν„°λŸ΄ μ‚¬μš©ν•΄μ„œ ν•„μˆ˜ κ°’ μ§€μ •ν•˜κΈ°

jaeyeong 2023. 3. 29. 16:36

 

ν•΄λ‹Ή 글은 νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž˜λ° μ±…κ³Ό 유데미 νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°•μ˜λ₯Ό κ³΅λΆ€ν•˜μ—¬ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

μˆ˜μ •ν•΄μ•Ό ν•  뢀뢄이 μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ μ•Œλ €μ£Όμ„Έμš”!

 

νƒ€μž… λ¦¬ν„°λŸ΄μ΄λž€?

 

μ±…μ—μ„œλŠ” 였직 ν•˜λ‚˜μ˜ 값을 λ‚˜νƒ€λ‚΄λŠ” νƒ€μž…μ΄λΌκ³  μ†Œκ°œν•˜κ³  μžˆλ‹€.

λͺ¨λ“  κ³³μ—μ„œ 일어날 수 μžˆλŠ” μ‹€μˆ˜λ₯Ό 방지해 μ•ˆμ „μ„±μ„ 확보해 μ£ΌλŠ” κ°•λ ₯ν•œ μ–Έμ–΄ κΈ°λŠ₯이라고 λΆ€μ—° μ„€λͺ…을 ν•΄μ£Όκ³  μžˆλ‹€.

 

λ‚˜λŠ” 말 κ·ΈλŒ€λ‘œ 값을 νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이라고 μ΄ν•΄ν–ˆκ³  큰 어렀움이 μ—†λŠ” κ°œλ…μ΄μ—ˆλ‹€.

 

let answer: true = true;
answer = false; // Type 'false' is not assignable to type 'true'.

 

μœ„ μ½”λ“œμ²˜λŸΌ answer의 νƒ€μž…μ„ true둜 μ§€μ •ν•˜λ©΄ 이후 값을 λ³€κ²½ν•˜μ§€ λͺ»ν•œλ‹€.

const와 같은 역할을 ν•˜λŠ”κ΅¬λ‚˜λΌκ³  생각이 λ“€μ—ˆλ‹€.

 

그러면 μ΄λŸ¬ν•œ κ°•λ ₯ν•œ κΈ°λŠ₯을 μ–΄λ–»κ²Œ ν™œμš©ν•  수 μžˆμ„μ§€ κΆκΈˆν•΄μ‘Œλ‹€.

μ‹€μ œ ν”„λ‘œμ νŠΈμ—μ„œλ„ 잘 μ‚¬μš©λ λ§Œν•œ μ˜ˆμ‹œλ₯Ό κ°•μ˜μ—μ„œ λ³Ό 수 μžˆμ—ˆλ‹€.

 

νƒ€μž… λ¦¬ν„°λŸ΄ ν™œμš©ν•˜κΈ°

 

숫자 λ˜λŠ” λ‚΄μš©μ΄ 숫자인 λ¬Έμžμ—΄μ„ μž…λ ₯λ°›μ•„ μ›ν•˜λŠ” νƒ€μž…μœΌλ‘œ 좜λ ₯될 수 μžˆλ„λ‘ ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.

그러면 λ‚˜λŠ” μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•  것 κ°™λ‹€.

 

function combine(input1: number | string, input2: number | string, resultType: string) {
    if (resultType === 'text') {
        return input1.toString() + input2.toString();
    }
    if (resultType === 'number') {
        return Number(input1) + Number(input2);
    }
    return '전달받을 κ²°κ³Ό νƒ€μž…μ„ μž‘μ„±ν•΄μ£Όμ„Έμš”.'
}

const combineAges = combine(30, 26, 'number');
console.log(combineAges); // 56
console.log(typeof combineAges); // number

 

ν•˜μ§€λ§Œ 이 μ½”λ“œμ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ¬Έμ œμ μ€,

resultType을 μž‘μ„±ν•˜λŠ” 것이 μ‚¬λžŒλ§ˆλ‹€ λ‹€λ₯Ό 수 μžˆμ–΄μ„œ μ •ν™•ν•˜κ²Œ 'text'와 'number'둜 값을 μž…λ ₯λ°›κΈ°κ°€ μ–΄λ €μšΈ 수 μžˆλ‹€λŠ” 점이닀.

더 큰 λ¬Έμ œλŠ” 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 점이닀.

 

λ§Œμ•½ 'as-text'둜 μ„Έλ²ˆμ§Έ 인자λ₯Ό μ „λ‹¬ν–ˆμ„ λ•Œ, 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šκ³  '전달받을 κ²°κ³Ό νƒ€μž…μ„ μž‘μ„±ν•΄μ£Όμ„Έμš”.' λΌλŠ” κ°’λ§Œ λ°˜ν™˜λ˜λ‹ˆ

어리λ‘₯절 ν•  것 κ°™λ‹€.

κ·Έλ ‡λ‹€κ³  λ°˜ν™˜κ°’μ„ '전달받을 κ²°κ³Ό νƒ€μž…μ€ text λ˜λŠ” number둜만 μž‘μ„±ν•΄μ£Όμ„Έμš”.' 라고 λ‘λŠ” 것도 λ‚­λΉ„λΌλŠ” 생각이 λ“€μ—ˆλ‹€.

 

이λ₯Ό μƒμˆ˜ν™” ν•΄μ„œ 값을 ν™œμš©ν•  수 μžˆκ² μ§€λ§Œ,

 

const TEXT = 'text';
const NUMBER = 'number';

 

λ§Œμ•½ 선택지가 λ§Žμ•„μ§„λ‹€λ©΄ μ–΄λ–€ 값이 μ„ νƒμ§€λ‘œ μžˆμ—ˆλŠ”μ§€ 기얡을 ν•˜κΈ°κ°€ μ–΄λ €μšΈ 수 있으며,

정해진 값이 μ•„λ‹Œ λ‹€λ₯Έ 값을 μž‘μ„±ν–ˆμ„ λ•Œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” λ¬Έμ œμ μ€ κ·ΈλŒ€λ‘œμ΄λ‹€.

 

이럴 λ•Œ νƒ€μž… λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜λ©΄ 훨씬 κ°„νŽΈν•΄μ§„λ‹€.

 

function combine(input1: number | string, input2: number | string, resultType: 'text' | 'number') {
    if (resultType === 'text') {
        return input1.toString() + input2.toString();
    }
    if (resultType === 'number') {
        return Number(input1) + Number(input2);
    }
    return;
}

combine(12,23,'as-text'); // Error: Argument of type '"as-text"' is not assignable to parameter of type '"number" | "text"'.

 

인자의 νƒ€μž…μ„ μž…λ ₯받을 κ°’μœΌλ‘œ μ •ν•΄λ‘”λ‹€λ©΄ μ˜λ„ν•œ 바와 λ‹€λ₯Έ 값을 μž‘μ„±ν–ˆμ„ λ•Œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 것을 확인할 수 μžˆλ‹€.

그리고 μ–΄λ–€ 값이 μ™€μ•Όν•˜λŠ”μ§€λ„ μ•Œλ €μ£Όλ‹ˆ λ”μš± μ’‹λ‹€.

 

Type alias(νƒ€μž… 별칭)둜 μˆ˜μ •ν•΄λ³΄κΈ°

 

type aliasλž€ let, const둜 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ“―μ΄ type으둜 νƒ€μž…μ„ μ„ μ–Έν•˜λŠ” 것이닀.

μ‚¬μš©λ²•μ€ λ‹€μŒκ³Ό κ°™λ‹€.

 

type Person = {
    name: string,
    age: number
}

const driver: Person = {
    name: 'JaeYeong',
    age: 100
}

// νƒ€μž… 별칭을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ
const driver: {
    name: name: string,
    age: number
} = {
    name: 'JaeYeong',
    age: 100
}

 

이λ₯Ό ν™œμš©ν•΄μ„œ combineν•¨μˆ˜λ₯Ό λ”μš± κ°„λ‹¨ν•˜κ²Œ μˆ˜μ •ν•  수 μžˆλ‹€.

 

type ResultType = 'number' | 'text';

function combine(input1: number | string, input2: number | string, resultType: ResultType) {
    if (resultType === 'text') {
        return input1.toString() + input2.toString();
    }
    if (resultType === 'number') {
        return Number(input1) + Number(input2);
    }
    return;
}

 

μ§€κΈˆμ€ 값이 κ°„λ‹¨ν•˜κ²Œ λ‘κ°œλΏμ΄μ–΄μ„œ 체감이 덜 될 수 μžˆμœΌλ‚˜ λ³΅μž‘ν•œ 선택지가 μžˆλ‹€λ©΄ 더 쒋은 선택이지 μ•Šμ„κΉŒ μ‹Άλ‹€.