[TypeScript] ํ•จ์ˆ˜

์†Œ์ด๋ށยท2023๋…„ 8์›” 1์ผ
0

TypeScript-์ฝ”๋”ฉ์•™๋งˆ

๋ชฉ๋ก ๋ณด๊ธฐ
4/8
post-thumbnail

๐ŸŒˆ ์ฝ”๋”ฉ์•™๋งˆ์˜ TypeScript ๊ฐ•์ขŒ ์ˆ˜๊ฐ• ํ›„, ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ˜•์‹

ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฆฌํ„ด๊ฐ’์˜ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ค€๋‹ค.

function add(num1: number, num2: number): void {
	console.log(num1 + num2);
}

ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ optional๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

1.ํ˜•์‹
?๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

function hellow(name?: string) {
	return `Hello, ${name || "world"}`;
}

const result = hello();

์œ„์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

function hello(name = "world") {
	return `Hello, ${name}`;
}

const result = hello();

2.์ˆœ์„œ
optional์ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋งจ ๋’ค์— ์ž‘์„ฑํ•œ๋‹ค.

function hello(name: string, age?: number): string {
	if(age !== undefined) {
    	return `Hello, ${name}. You are ${age}.`;   
    } else {
    	return `Hello, ${name}`;
    }
}

console.log(hello("Sam"));

๋งŒ์•ฝ ์•ž์— ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ undefined๋กœ ์ฑ„์›Œ์ค€๋‹ค.

function hello(age: number | undefined, name: string): string {
	if(age !== undefined) {
    	return `Hello, ${name}. You are ${age}.`;   
    } else {
    	return `Hello, ${name}`;
    }
}

console.log(hello(undefined, "Sam"));

rest parameter์ธ ๊ฒฝ์šฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์„ ๋ฐฐ์—ด๋กœ ์ง€์ •ํ•œ๋‹ค.

function add(...nums: number[]) {
	return nums.reduce((result, num) => result + num, 0);
}

ํ•จ์ˆ˜ ๋ณธ๋ฌธ์— this๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ์ด์ „์— this์˜ ํƒ€์ž…์„ ์ž‘์„ฑํ•œ๋‹ค.

interface User {
	name: string;
}

const Sam: User = {name:'Sam'}

function showName(this:User, age:number, gender:'m'|'f') {
	console.log(this.name, age, gender)
}

const a = showName.bind(Sam);
a();

ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋ฆฌํ„ด๊ฐ’์˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ

Function Overloads๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. overload signature๋ฅผ ์ž‘์„ฑ ํ›„ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ž‘์„ฑํ•ด ์ค€๋‹ค.

์ผ๋ถ€ JavaScript ํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ์ธ์ˆ˜ ์ˆ˜์™€ ์œ ํ˜•์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ...์ƒ๋žต... ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” overload signature๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐœ์˜ overload signature(๋ณดํ†ต 2๊ฐœ ์ด์ƒ)๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๐Ÿ”—https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” age์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋ฆฌํ„ด๊ฐ’์˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ด๋‹ค.

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

// overload signature
function join(name: string, age: string): string;
function join(name: string, age: number): User;
// ํ•จ์ˆ˜ ๋ณธ๋ฌธ
function join(name: string, age: number | string): User | string {
	if(typeof age === "number") {
    	return {name, age};
    } else {
    	return "๋‚˜์ด๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.";
    }
}

const sam: User = join("Sam", 30);
const jane: string = join("Jane", "30");

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