V-logue

[Typescript] 노마드코더 TypeScript로 블록체인 만들기 (3-0) 본문

발자취/Typescript

[Typescript] 노마드코더 TypeScript로 블록체인 만들기 (3-0)

보그 2022. 8. 11. 20:59

호출 시그니쳐(Call Signatures)

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

위와 같은 코드가 작성됐을 때 TS는 
(parameter) a: any , 'a' 매개 변수는 암시적으로 'any' 형식이지만,
사용량에서 더 나은 형식을 유추할 수 있습니다.ts(7044)
라는 a, b의 argument가 이상하다고 메세지를 보낸다. 그 이유는
아직 a, b의 type이 지정되지 않았기 때문이다. 
type이 지정되지 않는 argument(인수)는 any타입인데 TS는 any타입을 싫어한다.
위 코드에 타입을 줘야한다.

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

다음은 다른 방법으로 위 코드를 표현해 볼건데, => 화살표 함수를 이용한다.

const add2 = (a: number, b : number) => a+b

add2 라는 Arrow function은 a+b라는 Number 타입의 값을 return한다.
여태 배운걸로 add라는 함수만의 타입을 만들고 싶은데, 이전 강의에서의 Player처럼
이제 앞으로 함수만의 타입은 call signatures라고 부를 예정
위 Arrow function의 마우스 포인터를 올려서 확인되는
const add2: (a: number, b: number) => number 라는 내용이 바로 call signatures가 된다.
 call signatures는 당신이 함수를 어떻게 호출해야 하는지에 대해서 정의해준다.
 call signatures든 function signatures든 중요한건 signatures로
함수의 타입과 함수의 반환 타입이 아닌, 인자(arguments)와 함수의 return 타입을 알려주는 것이다.
이제 signatures를 활용해야 하는데 다음과 같이 사용할 수 있다.

type Add = (a : number, b: number) => number;

const add : Add = (a, b) => a + b

위 코드 처럼 사용하면 이제 add라는 Arrow function에 타입을 지정해주지 않아도 된다.
이미 Add라는 타입을 add가 알고 있기 때문이다. signatures를 알 고 있고 ts는 추론한다.
함수마다 타입을 지정하는 번거로움을 call signatures를 사용한다면 피할 수 있다.
프로그램을 설계하면서 타입을 먼저 생각하고, 그러고 나서 코드를 구현하게 된다.

type Add = (a : number, b: number) => number;

const add : Add = (a, b) => { a + b }

만약 위처럼 코드를 실수로 작성하게 된다면, ts는


'(a: number, b: number) => void' 형식은 'Add' 형식에 할당할 수 없습니다.
  'void' 형식은 'number' 형식에 할당할 수 없습니다.


라는 에러메세지를 내보내게 될 것이다. number를 반환해야 한다.

Comments