자바스크립트와 같이 기명 함수와 익명 함수 그대로 사용할 수 있다
함수 타입
함수에 타입 붙이기
// 기명 함수
function add(x: number, y: number): number {
return x + y;
}
// 익명 함수
let myAdd = function(x: number, y: number): number { return x + y };
파라미터의 타입을 보고 리턴값의 타입을 파악할 수 있으므로 생략이 가능
함수 타입 작성하기
위는 그저 함수에 타입을 붙인 것이고 함수 전체의 타입을 설정하는 법도 존재한다
let myAdd:
(value: number, increase: number) => number /* 여기까지 함수 타입 */ =
function(x: number, y: number): number { return x + y; }; // 실제 함수 선언
타입의 추론
함수 전체 타입을 표기했다면 뒤에서 선언할 함수에는 타입을 명시하지 않아도 타입스크립트가 알아서 추론해준다
let infer: (value: number, increase: number) => number =
function (x,y) {return x+y};
이러한 타입 추론을 contextual typing이라고 부른다
선택적 매개변수와 기본 매개변수
자바스크립트와 다르게 타입스크립트는 기본적으로 명시된 파라미터가 모두 필요하다고 가정한다
function needs(first: string, second: string) : string{
return first+second;
}
// needs('asdf',); 에러
앞서 살펴본 interface처럼 선택적으로 매개변수를 받을 수 있게 설정이 가능하다
function needOptional(first: string, second?: string) : string{
return second ? first+second : first;
}
console.log(needOptional('asdf',));
다만 선택적 매개변수를 설정할 때는 순서를 유의해야한다
나머지 매개변수
자바스크립트에선 매개변수를 따로 설정해두지않아도 arguments로 추가적으로 매개변수들을 받아 올 수 있었지만 타입스크립트에서는 추가적인 조치가 필요하다
// Rest Parameters
function rest(first:string, ...others:string[]){
return first + ' ' + others.join(' ');
}
console.log(rest('str','str2','str3','str4'));
this
let deck = {
suits: ["hearts", "spades", "clubs", "diamonds"],
cards: Array(52),
createCardPicker: function() {
return function() {
let pickedCard = Math.floor(Math.random() * 52);
let pickedSuit = Math.floor(pickedCard / 13);
try{
return {suit: this.suits[pickedSuit], card: pickedCard % 13};
}catch (e){
return e;
}
}
}
}
let cardPicker = deck.createCardPicker();
let pickedCard = cardPicker();
console.log("card: " + pickedCard.card + " of " + pickedCard.suit);
'JavaScript > TypeScript' 카테고리의 다른 글
유틸리티 타입 (0) | 2021.10.24 |
---|---|
Generics (0) | 2021.03.12 |
클래스 (0) | 2021.03.03 |
인터페이스 (0) | 2021.03.02 |
기본 타입 (0) | 2021.03.01 |