[TS] 함수와 메서드

로선생·2022년 5월 21일
0

타입스크립트

목록 보기
6/14

함수 선언문

자바스크립트에서 함수는 function키워드로 만드는 함수와 화살표 함수가 있다.
타입스크립트 함수 선언문은 자바스크립트 함수 선언문에서 매개변수와 함수 반환값에 타입 주석을 붙이는 형태로 구성된다.

function add(a: number, b:number):number{
	return a+b
}

변수와 마찬가지로 함수 선언문에서도 매개변수와 반환값에 대한 타입 주석을 생략할 수 있다.
다만, 변수 때와는 달리 함수의 매개변수 타입과 반환 타입을 생략하는 것은 바람직하지 않다. 타입이 생략되어 있으면 함수의 구현 의도를 알기 어렵고 잘못 사용하기 때문이다.

Void타입

값을 반환하지 않는 함수는 반환 타입이 void이다.
void 타입은 함수 반환 타입으로만 사용할 수 있다.

function add(a: number, b:number):void{
	console.log(a, b);
}

함수 시그니처

변수에 타입이 있듯, 함수 또한 타입이 있다. 함수의 타입을 함수 시그니처라고 한다.
(매개변수1 타입, 매개변수2 타입...) => 반환값 타입

let printMe: (string, number) => void = function(name: string, ageL number): void{}

type 키워드

또한 타입스크립트는 type이라는 키워드를 제공한다. type키워드는 기존에 존재하는 타입을 단순히 이름만 바꿔서 사용할 수 있게 해준다. 이러한 기능을 타입 별칭이라고 한다.

type stringNumFucn = (string, number) => void
let f: stringNumFucn = function(a: string, b: number): void {}

type 별칭 덕분에 변수 f에 타입 주석을 더 수월하게 붙일 수 있다.

undefined 관련 주의사항

undefined는 타입스크립트의 타입 계층도에서 최하위 타입이다.

interface IName{
	name: string
}
function getName(o: IName){return o.name}

let n = getName(undefined) //오류 발생
console.log(n)

getName은 IName타입의 매개변수를 요구하지만, undefined를 매개변수로 호출해도 구문 오류가 발생하지 않는다.
undefined가 최하위 타입이므로, IName을 상속하는 자식 타입으로 간주한다.
코드를 실행하면, o.name부분이 undefined.name이 되어 오류가 발생하는 것이다.
이런 오류를 방지하기 위해 매개변숫값이 undefined인지 판별하는 코드를 작성해야 한다.

interface IName{
	name: string
}
function getName(o: IName){return o!=undefined && o.name: 'unknown name'}

let n = getName(undefined)
console.log(n) 

선택적 매개변수

함수의 매개변수에서 이름 뒤에 물음표를 붙일 수 있으며, 이를 선택적 매개변수라고 한다.

function fn(arg1: string, arg?:number): void{}
profile
이제는 이것저것 먹어요

0개의 댓글