Typescript 문서 - 05

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
  1. 객체가 있는 overload
  2. 숫자가 있는 overload
    이 두 가지의 경우만 있다. pickCard를 다른 파라미터 유형과 함께 호출하면 오류가 발생한다.

댓글

가장 많이 본 글