Front-End/TypeScript

νƒ€μž…μŠ€ν¬λ¦½νŠΈ[TypeScript] | ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„° νƒ€μž… μ •μ˜ν•˜κΈ°

jaeyeong 2023. 4. 6. 14:36

 

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

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

 

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„° νƒ€μž… μ •μ˜

(νŒŒλΌλ―Έν„° = λ§€κ°œλ³€μˆ˜)

 

ν•¨μˆ˜λ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ μ •μ˜ν•  λ•Œ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λŠ” λͺ…μ‹œμ μœΌλ‘œ νƒ€μž…μ„ μ •μ˜ν•˜λ©° λ°˜ν™˜ νƒ€μž…μ€ μΆ”λ‘ ν•˜λ„λ‘ λ‘”λ‹€.
νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” λͺ‡κ°€μ§€ νŠΉμˆ˜ν•œ 상황을 μ œμ™Έν•˜κ³ λŠ” λ§€κ°œλ³€μˆ˜ νƒ€μž…μ€ μΆ”λ‘ ν•˜μ§€ μ•Šκ³ ,

λͺ…μ‹œμ μœΌλ‘œ μ •μ˜ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 λ°˜ν™˜ νƒ€μž…μ€ μžλ™μœΌλ‘œ μΆ”λ‘ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

λ§€κ°œλ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ„ νƒμ μœΌλ‘œ μ„ μ–Έν•  μˆ˜λ„ μžˆλ‹€.
선택적 λ§€κ°œλ³€μˆ˜λ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ°€μž₯ λ§ˆμ§€λ§‰μ— λ¬ΌμŒν‘œ ν‘œμ‹œμ™€ ν•¨κ»˜ μž‘μ„±ν•˜λ©΄ λœλ‹€.

function log(message:string, userId?: string) {
    let time = new Date().toLocaleTimeString();
    console.log(time, message, userId || 'Not');
}

log('Page loaded'); // "μ˜€μ „ 9:51:29", "Page loaded", "Not"
log('User Signed in', "Jae"); // "μ˜€μ „ 9:51:29", "User Signed in", "Jae"

μœ„ μ½”λ“œλŠ” logν•¨μˆ˜λŠ” message와 userIdλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ κ°–λŠ”λ°, userIdλŠ” 값이 전달 λ μˆ˜λ„, μ•ˆλ μˆ˜λ„ 있으며

userIdκ°€ μ „λ‹¬λ˜μ§€ μ•ŠμœΌλ©΄ 'Not'을 좜λ ₯ν•˜λΌλŠ” μ˜λ―Έμ΄λ‹€.

μœ„ 방법보닀 더 λͺ…μ‹œμ μœΌλ‘œ 기본값을 μž‘μ„±ν•˜μ—¬ 더 읽기 쒋은 μ½”λ“œλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

function log(message:string, userId = "Not signed in") {
    let time = new Date().toLocaleTimeString();
    console.log(time, message, userId || 'Not');
}

log('Page loaded'); // "μ˜€ν›„ 2:25:40",  "Page loaded",  "Not signed in"
log('User Signed in', "Jae"); // "μ˜€ν›„ 2:25:40",  "User Signed in",  "Jae"


λ§€κ°œλ³€μˆ˜λ₯Ό 전달받을 λ•Œ λͺ‡ 개의 λ§€κ°œλ³€μˆ˜κ°€ 전달될지 μ •ν™•νžˆ μ•Œ 수 없을 경우 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” argumentsλ₯Ό μ‚¬μš©ν–ˆμ—ˆλ‹€.

function sum():number {
    return Array.from(arguments).reduce((total,n) => total + n, 0);
}

sum(1,2,3); // Error:: Expected 0 arguments, but got 3.


μœ„ μ½”λ“œλŠ” argumentsλŠ” 순수 배열이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— Array.from()을 μ‚¬μš©ν•΄μ„œ λ°°μ—΄λ‘œ λ§Œλ“€μ–΄μ€€ λ‹€μŒ,

reduce()λ₯Ό μ‚¬μš©ν•˜μ—¬ 합계λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄μ„œ totalκ³Ό n은 any둜 νƒ€μž…μ΄ μΆ”λ‘ λœλ‹€.

 

이런 λ¬Έμ œλ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜(Rest Parameters)λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.
μ•ˆμ „ν•˜κ²Œ μž„μ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 전달받을 수 있으며 νƒ€μž… 좔둠도 number둜 잘 λ˜μ–΄ μ•ˆμ „ν•˜κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆκ²Œλœλ‹€.

function sumSafe(...numbers: number[]):number {
    return numbers.reduce((total,n) => total + n,0);
}

console.log(sumSafe(1,2,3)); // 6

 

ν•œκ°€μ§€ μ£Όμ˜ν•΄μ•Ό ν•  점은, λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  땐 κ°€μž₯ λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•΄μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것이닀.

function sumSafe(a:number, b:number, ...numbers: number[]):number {
    console.log(a); // 100
    console.log(b); // 101
    return numbers.reduce((total,n) => total + n,0);
}

console.log(sumSafe(100, 101, 1,2,3)); // 6