Typescript 문서 - 05
Functions
Functions
- 이름이 있는 함수(Named function, 명명함수)
function add(x, y) {
return x + y;
}
- 이름이 없는 함수(Anonymous function, 익명함수)
let myAdd = function(x, y) { return x+y; };
** Capture란?함수 밖(외부)의 변수를 참조하는 것
ex)
let z = 100;
function add(x, y) {
return x + y + z;
}
Function types
return type은 선택적으로 생략할 수 있다.Optional and Default parameters
Optional: 있어도, 없어도 되는 것Default: 선언했으면 반드시 있어야 하는 것
// default
function add(x: number, y: number, z: number) {...}
// optional
function add(x: number, y: number, z?: number) {...}
default 방식으로 add함수를 호출할 때에는 파라미터를 3개를 무조건 넘겨주어야 한다.파라미터 3개를 꼭 넘겨주어도 되지만, 넘어온 파라미터가 없는 경우네는 기본값으로 세팅해주도록 할 수 있다.
function add(x: number, y: number, z = 10) {...}
let result1 = add(5, 10); // Ok
let result2 = add(5, 10, 20); // Ok
Reset parameter
Reset 파라미터는 무한한 개수의 Optional 파라미터로 취급된다. 원하는 만큼의 파라미터를 넘겨줄 수 있다.function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}
let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
Reset 파라미터가 있는 함수의 타입에도 사용된다.function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}
let buildNameFun: (fname: string, ...rest: string[]) => string = buildName;
this
this and arrow functions
function add(a, b) {
'use strict';
console.log(this === undefined); // true
return a + b;
}
add(2, 5);
여기에서 this는 undefined이다.arrow functions 특징
- 화살표 함수는 항상 익명이다.
- this를 바인딩하지 않는다.
- 생성자 함수로 사용할 수 없다.
- IE환경에서는 아직 제공하지 않는다고 한다…(쓰려면 babel과 함께 사용해야 한다.)
Overloads
동일한 함수에 대하여 여러 함 수 타입을 제공하는 것let suits = ["hearts", "spades", "clubs", "diamonds"];
function pickCard(x: {suit: string; card: number; }[]): number;
function pickCard(x: number: {suit: string; card: number; };
function pickCard(x): any {
if (typeof x == "object") {
let pickedCard = Math.floor(Math.random() * x.length);
return pickedCard;
}
else if (typeof x == "number") {
let pickedSuit = Math.floor(x / 13);
return { suit: suits[pickedSuit], card: x % 13};
}
}
let myDek = [{suit: "diamonds", card: 2}, {suit: "spades", card: 10}, {suit: "hearts", card: 4}];
let pickedCard1 = myDeck[pickCard(myDeck)];
alert("card: " + pickedCard1.card + " of " + pickedCard1.suit);
let pickedCard2 = pickCard(15);
alert("card: " + pickedCard2.card + " of " + pickedCard2.suit);
function pickCard(x): any는- 객체가 있는 overload
- 숫자가 있는 overload
이 두 가지의 경우만 있다.pickCard를 다른 파라미터 유형과 함께 호출하면 오류가 발생한다.
댓글
댓글 쓰기