[TypeScript] 함수타입 정의

gigi·2022년 7월 11일
0

기본적인 타입 선언

// 함수

function add(num1: number, num2: number): number{
	return num1 + num2;
}

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

function isAdult(age: number): boolean{
	return age > 19;
}

// 함수의 반환 값에 타입을 정하지 않을 때는 void라도 사용

매개변수와 함수의 반환값에 타입 추가

함수의 인자

function add(num1: number, num2: number): number{
	return num1 + num2;
}

add(10,20) // 30
add(10,20,30) // error
add(10) // eeror

타입스크립트에서는 함수의 인자를 모두 필수 값으로 간주한다.

따라서, 함수의 매개변수를 설정하면 undefined 나 null 이라도 인자를 넘겨야 한다. 이는 정의된 매개변수 값만 받을 수 있고 추가로 인자를 받을 수 없다는 의미이다.

function add(num1: number, num2?: number): number{
	return num1 + num2;
}

add(10,20) // 30
add(10,20,30) // error
add(10) // 10

정의된 매개변수의 갯수만큼 인자를 넘기지 않아도 되는 특성을 이용하고싶다고 하면 ‘?’ 를 사용하면 된다.

function add(num1: number, num2 = '50'): number{
	return num1 + num2;
}

add(10,20) // 30
add(10,20,30) // error
add(10) // 60
add(10,undefined) // 60

매개변수 초기화는 ES6 문법과 동일하다. num2의 인자값이 없거나 undefined가 전달되면 기본값으로 초기화하여 결과값이 반환된다.

REST 문법이 적용된 매개변수

// 나머지 매개변수 rest parameters

function sum(...nums: number[]) {  //number[] 타입 지정
		return nums.reduce((result, num) => result + num, 0);
}

sum(1, 2, 3); // 6
sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 55

////////////////////////////////////////////////////////////

function sum(a:number, ...nums: number[]) {
		let totalOfNums = 0;
		for (let key in nums){
			totalOfNums += nums[key]
	}
	return a + totalOfNums;
}

this, bind

// this , bind

interface User {
	name : string;
}

const Sam: User = {
	name : "Sam";
}

function showName(this: User){
	console.log(this.name);
}

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

// 매개변수가 있을 때

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(30, "m");  // "Sam", 30, "m"

오버로드

 // 오버로드
 // 동일한 함수지만 매개변수의 타입이나 갯수에 따라 다른방식으로 동작해야될때 사용

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

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 === "nember") {
		return{
			name,
			age,
		};
	}
	else { 
		return "나이는 숫자로 입력해주세요";
	}
}

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

0개의 댓글