본문 바로가기

IT

Effective Typescript - 12 - 함수 표현식에 타입 적용하기.

자바스크립트, 타입스크립트에는 함수 '표현식(expression)' 과 '문장(statement)'로 함수를 만들 수 있다.
그리고 '표현식' 방식과 '문장' 방식을 다르게 인식한다.

 

// 자바스크립트에서는 함수문장과 함수표현식을 다르게 인식한다.
function rollDice1(sides: number): number{ return 1; } //문장
const rollDice2 = function (sides: number): number { return 1; } // 표현식
const rollDice3 = (sides: number) => {} // 표현식
 
근데 여기서 함수 선언시 표현식 방식을 사용하는 것이 타입스크립트에서는 더 유리하고 한다.
그 이유는 무엇인가?
 
a. 함수의 형태를 타입으로 선언하여 함수 표현식에다가 재사용할 수 있다는 점이 유리하다.
type DiceRollFn = (side: number) => number; // 함수의 형태를 타입으로 선언함
const rollDice: DiceRollFn =  side => { return 1 }; // 표현식에다가 함수의 타입을 부여
b. '문장' 방식으로 같은 유형의 함수를 반복적으로 구현할때, 반복적으로 함수의 형태까지 표현해야 한다. 하지만 표현식 방식으로 기 정의된 타입으로 '재사용' 한다면 수고로움이 줄어들 수 있다.
// 선언 방식으로 함수를 구현할 때, 반복적으로 함수의 형태를 표현하고잇다.
function add(a: number, b: number): number { return a + b;}
function sub(a: number, b: number): number { return a - b;}
function mul(a: number, b: number): number { return a * b;}
function div(a: number, b: number): number { return a / b;}

// 기 정의된 타입을 이용하여 표현식 방식으로 함수를 구현할 때 반복적인 함수의 형태를 코딩하지 않는다.
type Calc = (a:number, b: number) => number;
const add2: Calc = (a, b) => ( a + b );
const sub2: Calc = (a, b) => ( a - b );
const mul2: Calc = (a, b) => ( a * b );
const div2: Calc = (a, b) => ( a / b );