바스키아
TypeScript 함수형 타입(function Type) 본문
이번 글도 사실 딱히 크게 쓸 내용은 없어.... 전에 배운 타입을 함수에도 적용한다는거지....
정말 간단한거부터 시작할께
function add(x: number, y: number) : number {
return x + y;
}
const result =add(1, 2);
function buildUserinfo(name : string, email: string){
return {name, email};
}
const user = buildUserInfo();
|
add함수를 먼처보면 x 와 y 파라미터에 타입을 지정해주었다. 그리고 파라미터 옆에 : 으로 number타입으로 지정해주었는 --> 함수의 바디를보고 반환되는 값이 number다 라고 :number로 리턴타입을 위와같이 지정해주었다.
만약에 buildUserInfo()를 익명유저 개념처럼 아무값도 넣지않아도 사용해야한다는 경우가 생겼을때?!? 어찌해야함?
function buildUserinfo(name?: string, email?: string){
return {name, email};
}
const user = buildUserinfo();
|
파라미터 옆에 옵션 개념인 ? 를 붙여주면 파라미터가 없을때 undefind로 자동 default가 된다.
하지만 추가로 undefind가 아닌 파라미터 없을때 초기값을 지정해 주고싶다면??
function buildUserinfo(name?: string = "-", email?: string = "-"){
return {name, email};
}
const user = buildUserinfo();
|
이런식으로 default값이 undefined가 아닌 "-" 값이 들어가게 될것이다. 여기서 더줄인다면 다음과 같을것
function buildUserinfo(name? = "-", email = "-"){
return {name, email};
}
const user = buildUserinfo();
|
이건 처음본건다 타입에 따라 function을 오버라이드 개념으로 선언할수 있다. (오버로드 시그니쳐라고 한다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
interface Storage {
a : string;
}
interface ColdStorage {
b : string;
}
function store(type: "통조림") : Storage
function store(type: "아이스크림") : ColdStorage
function store(type: "통조림" | "아이스크림"){
if (type === "통조림"){
return { a: "통조림"}
} else if ( type ==="아이스크림"){
return { b: "아이스크림"}
} else {
throw new Error('unsupported type');
}
}
const s = store('통조림');
s.b
|
이게 무엇인고하니 function 타입을 통조림이랑 아이스크림으로 정해서 같은 이름의 함수가 오버라이딩 되어있는걸 볼수있다!! 그리고 그 store function 에 대해서 타입에따라 인터페이스 a 또는 b 가 리턴이 되는데
이정도까지 깔끔하게 쓴다면 타입스크립트 지금까지는 문제가 없을듯 하다 ㅎ
'JS > TypeScript' 카테고리의 다른 글
TypeScript 클래스 (Class Type) (0) | 2019.08.29 |
---|---|
TypeScript Enum (0) | 2019.08.29 |
TypeScript 인터페이스(Interface) (0) | 2019.08.29 |
TypeScript 기본타입 (0) | 2019.08.29 |
TypeScript 변수선언 (feat. var, const, let) (0) | 2019.08.29 |