πŸ“ κΈ°μˆ μ±… μŠ€ν„°λ””

23λ…„ 1μ›”λΆ€ν„° ν™œλ™ 쀑인 κ΅μœ‘μ—μ„œ, 뜻이 λ§žλŠ” λ™λ£Œλ“€κ³Ό ν•¨κ»˜ μ§„ν–‰ν•˜κ²Œ 된 μŠ€ν„°λ””
μ•žμœΌλ‘œλ„ κΎΈμ€€νžˆ 기술 μ„œμ μ„ 읽고 ν•¨κ»˜ λ°œμ „ν•˜λŠ” μ‹œκ°„μ΄ λ˜μ—ˆμœΌλ©΄ μ’‹κ² λ‹€!

5μž₯. ν•¨μˆ˜

선택적 λ§€κ°œλ³€μˆ˜

선택적 객체 νƒ€μž… 속성과 μœ μ‚¬ν•˜κ²Œ νƒ€μž… μ• λ„ˆν…Œμ΄μ…˜μ˜ : μ•žμ— ?λ₯Ό μΆ”κ°€ν•΄ λ§€κ°œλ³€μˆ˜κ°€ μ„ νƒμ μž„μ„ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

선택적 λ§€κ°œλ³€μˆ˜λŠ” λ°˜λ“œμ‹œ λ§ˆμ§€λ§‰μ— μ „λ‹¬ν•΄μ€˜μ•Όν•œλ‹€.

선택적 λ§€κ°œλ³€μˆ˜μ—λŠ” 기본적으둜 undefinedκ°€ ν• λ‹Ήλ˜κΈ° λ•Œλ¬Έμ—, ν•¨μˆ˜ 내뢀에 | undefined μœ λ‹ˆμ–Έ νƒ€μž…μ΄ μΆ”κ°€λœλ‹€.

const add = (first: number, second?: number) => {
  return first + (second ? second : 0);
}

---

// μ•„λž˜μ˜ μ½”λ“œμ™€ μœ„μ˜ μ½”λ“œλŠ” λ‹€λ₯΄λ‹€.
// μ•„λž˜ μ½”λ“œλŠ” 2번째 인자λ₯Ό λ°˜λ“œμ‹œ μ „λ‹¬ν•΄μ€˜μ•Όν•œλ‹€.
const add = (first: number, second: number | undefined) => {
  return first + (second ? second : 0);
}

λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜

function test(singer: string, ...songs: string[]) {}

λͺ…μ‹œμ  λ°˜ν™˜ νƒ€μž…

λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ νƒ€μž… μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ ν•¨μˆ˜μ˜ λ°˜ν™˜ νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

λ§€κ°œλ³€μˆ˜ λͺ©λ‘μ΄ λλ‚˜λŠ” ) λ‹€μŒ ν˜Ήμ€ ν•¨μˆ˜ μ„ μ–Έμ˜ 경우 { μ•žμ— λ°°μΉ˜ν•œλ‹€.

κ·Έμ™Έ λ°˜ν™˜ νƒ€μž…

void

ν•¨μˆ˜κ°€ μ–΄λ–€ 값도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” 경우, voidλ₯Ό 톡해 λ°˜ν™˜ νƒ€μž…μ„ 확인할 수 μžˆλ‹€.

ν•¨μˆ˜ νƒ€μž…μ„ μ„ μ–Έν•  λ•Œ, voidλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ—μ„œ λ°˜ν™˜λ˜λŠ” λͺ¨λ“  값이 λ¬΄μ‹œλœλ‹€.

JSμ—μ„œμ˜ ν•¨μˆ˜λŠ” μ‹€μ œκ°’μ΄ λ°˜ν™˜λ˜μ§€ μ•Šμ€ 경우, 기본으둜 λͺ¨λ‘ return undefinedκ°€ λ˜μ§€λ§Œ voidλŠ” 이 return undefinedμ™€λŠ” λ‹€λ₯΄λ‹€. voidλŠ” λ°˜ν™˜ νƒ€μž…μ΄ λ¬΄μ‹œλœλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

voidλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μ„ μ–Έλœ νƒ€μž… μœ„μΉ˜μ— μ „λ‹¬λœ ν•¨μˆ˜κ°€ λ°˜ν™˜λœ λͺ¨λ“  값을 λ¬΄μ‹œν•˜λ„λ‘ μ„€μ •ν•  λ•Œ 유용

μ˜ˆμ‹œ)

const records: string[] = [];
function test(records: string[]) {
	records.forEach((record) => records.push(record));
}

// μ‹€μ œ pushλŠ” 배열에 값을 넣기도 ν•˜μ§€λ§Œ, λ™μ‹œμ— pushν•œ 값을 λ°˜ν™˜ν•œλ‹€. 이 λ•Œ, forEachλŠ” 콜백으둜 λ°›λŠ” ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’
// void μ²˜λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ— μœ„μ™€ 같이 μ“Έ 수 μžˆλŠ” 것이닀.

never

μ–΄λ–€ ν•¨μˆ˜λŠ” 값을 λ°˜ν™˜ν•˜μ§€ μ•Šκ³  λ°˜ν™˜ν•  생각도 μ—†λ‹€. never λ°˜ν™˜ ν•¨μˆ˜λŠ” μΌλΆ€λŸ¬ 항상 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€κ±°λ‚˜ λ¬΄ν•œ 루프λ₯Ό μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. λͺ…μ‹œμ μœΌλ‘œ : never λ₯Ό ν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ ν›„ λͺ¨λ“  μ½”λ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λ‚Έλ‹€.

function fail(message: string): never {
	throw new Error(`μ—λŸ¬ λ°œμƒ: ${message}`);
}

!. voidλŠ” 아무것도 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜λ₯Ό μœ„ν•œ 것, neverλŠ” μ ˆλŒ€ λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜λ₯Ό μœ„ν•œ 것

ν•¨μˆ˜ μ˜€λ²„λ‘œλ“œ

κ΅¬ν˜„ μ‹œκ·Έλ‹ˆμ²˜μ™€ κ·Έ ν•¨μˆ˜μ˜ λ³Έλ¬Έ μ•žμ— μ„œλ‘œ λ‹€λ₯Έ λ²„μ „μ˜ ν•¨μˆ˜ 이름, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜ νƒ€μž…μ„ μ—¬λŸ¬ 번 μ„ μ–Έ

ν•¨μˆ˜ μ˜€λ²„λ‘œλ“œλŠ” λ³΅μž‘ν•˜κ³  μ„€λͺ…ν•˜κΈ° μ–΄λ €μš΄ ν•¨μˆ˜ νƒ€μž…μ— μ‚¬μš©ν•˜λŠ” μ΅œν›„μ˜ μˆ˜λ‹¨μ΄λ‹€. 즉, κ°€λŠ₯ν•˜λ©΄ 쓰지 μ•Šκ²Œ λ‹¨μˆœν•˜κ³  직관적인 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜λŠ” 게 더 μ’‹λ‹€.

function createDate(timestamp: number): Date;
function createDate(month: number, day: number, year: number): Date;
function createDate(month: number, day?: number, year?: number) {
	return day === undefined || year === undefined ? new Date(monthOrTimestamp) : new Date(year, monthOrTimestamp, day);
}

6μž₯. λ°°μ—΄

λ°°μ—΄ νƒ€μž…

let basicNumbers: number[] = [1, 2, 3];
let standardNumbers: Array<number> = [1, 2, 3]; // Array class + number generic

μ£Όμ˜μ‚¬ν•­: λΆˆμ•ˆμ •ν•œ 멀버

TS의 νƒ€μž… μ‹œμŠ€ν…œμ€ 기술적으둜 λ‹€μ†Œ λΆˆμ•ˆμ •ν•˜λ‹€. λ•Œλ‘œλŠ” κ°’ νƒ€μž…μ— λŒ€ν•œ νƒ€μž… μ‹œμŠ€ν…œμ˜ 이해가 μ˜¬λ°”λ₯΄μ§€ μ•Šμ„ 수 μžˆλ‹€.

μ•„λž˜μ˜ μ½”λ“œλŠ” μ‹€ν–‰ν•˜λ©΄ λ‹Ήμ—°νžˆ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€λ§Œ, 이전에 νƒ€μž… μ‹œμŠ€ν…œμ—μ„œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ”λ‹€.

function printElementsLength(elements: string[]) {
	console.log(elements[1116].length);
}

printElementsLength(["I'm", "Jayden"]);
  • TS의 λ°°μ—΄ 쑰회λ₯Ό 더 μ œν•œν•˜κ³  νƒ€μž…μ„ μ•ˆμ „ν•˜κ²Œ λ§Œλ“œλŠ” noUncheckedIndexedAccess ν”Œλž˜κ·Έκ°€ μžˆμ§€λ§Œ λ„ˆλ¬΄ μ—„κ²©ν•΄μ„œ 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

νŠœν”Œ

νŠœν”Œ: κ³ μ •λœ 크기의 λ°°μ—΄

let nameAndAge: [string, number];
nameAndAge = ['jayden', 123];

TSμ—μ„œ νŠœν”Œ νƒ€μž…μ€ 가변적인 배열보닀 더 ꡬ체적으둜 μ²˜λ¦¬λœλ‹€. κ°€λ³€ 길이의 λ°°μ—΄ νƒ€μž…μ€ νŠœν”Œ νƒ€μž…μ— ν• λ‹Ήν•  수 μ—†λ‹€.

const arr = ['jayden', 1116];
const tup: [string, number] = arr; // error / [string, number] !== (string | number)[]

νŠœν”Œ μΆ”λ‘ 

μ’€ 더 ꡬ체적인 νŠœν”Œ νƒ€μž…μž„μ„ 2가지 λ°©λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

  • λͺ…μ‹œμ  νŠœν”Œ νƒ€μž…
  • const assertion

const assertion

맀번 λͺ…μ‹œμ μœΌλ‘œ νŠœν”Œ νƒ€μž…μ„ μ¨μ£ΌλŠ” 건 번거둜운 μΌμ΄λ―€λ‘œ as constλ₯Ό 톡해 쒀더 νŽΈν•˜κ²Œ 읽기 μ „μš© νŠœν”Œμ„ μ§€μ‹œν•  수 μžˆλ‹€.

const readonlyTuple = ['jayden', 1116] as const;
// readonlyTuple은 readonly인 tuple둜 μ§€μ •λœλ‹€.