๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Language/Typescript

[Typescript] Typescript์˜ ํƒ€์ž…๊ณผ ํ•จ์ˆ˜

by DevIseo 2022. 9. 13.

TypeScript ๊ธฐ๋ณธ ํƒ€์ž… (12๊ฐ€์ง€)

  • Boolean
  • Number
  • String
  • Object
  • Array
  • Tuple
  • Enum
  • Any
  • void
  • Null
  • Undefined
  • Never

Array

ํƒ€์ž…์ด ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธ

let arr: number[] = [1,2,3];
let arr: Array<number> = [1,2,3]; //generic ์‚ฌ์šฉ

Tuple

ํŠœํ”Œ์€ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ณ ์ •๋˜๊ณ  ๊ฐ ์š”์†Œ์˜ ํƒ€์ž…์ด ์ง€์ •๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด ํ˜•์‹์„ ์˜๋ฏธํ•œ๋‹ค.

let arr: [string, number] = ['hi',10];

์ด ๋•Œ, ์ •์˜ํ•˜์ง€ ์•Š์€ ํƒ€์ž…, ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Enum

C, Java์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ํ”ํ•˜๊ฒŒ ์“ฐ์ด๋Š” ํƒ€์ž…์œผ๋กœ ํŠน์ • ๊ฐ’(์ƒ์ˆ˜)๋“ค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธ

enum Avengers { Capt, IronMan, Thor }
let hero: Avengers = Avengers.Capt;

// 1. ์ด๋„˜์€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
let hero: Avengers = Avengers[0];

// 2. ๋งŒ์•ฝ ์›ํ•œ๋‹ค๋ฉด ์ด๋„˜์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉ์ž ํŽธ์˜๋กœ ๋ณ€๊ฒฝํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
enum Avengers { Capt == 2, IronMan, Thor }
// => ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ€ 2๋ถ€ํ„ฐ ์‹œ์ž‘!
let hero: Avengers = Avengers[2]; // Capt
let hero: Avengers = Avengers[4]; // Thor

Any

`๋ชจ๋“  ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ํ—ˆ์šฉ`ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ๊ธฐ์กด์— js๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ์›น ์„œ๋น„์Šค ์ฝ”๋“œ์— ts๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•  ๋•Œ ํ™œ์šฉํ•˜๋ฉด ์ข‹์€ ํƒ€์ž…

let str: any = 'hi';
let num: any = 10;
let arr: any = ['a', 2, true];

Void

๋ณ€์ˆ˜์—๋Š” `undefined`์™€ `null`๋งŒ ํ• ๋‹น**ํ•˜๊ณ , ํ•จ์ˆ˜์—๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…

let unuseful: void = undefined;
function notuse(): void {
  console.log('sth');
}

Never

ํ•จ์ˆ˜์˜ ๋์— ์ ˆ๋Œ€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์ง€๋‹Œ ํƒ€์ž…

function neverEnd(): never {
  while (true) {

  }
}

Typescript์—์„œ์˜ ํ•จ์ˆ˜

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… 3๊ฐ€์ง€

  • ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(๋งค๊ฐœ๋ณ€์ˆ˜)
  • ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜
  • ํ•จ์ˆ˜์˜ ๊ตฌ์กฐ

ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ์ ์ธ ํƒ€์ž… ์„ ์–ธ

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

๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์˜ ์„ ์–ธ ๋ฐฉ์‹์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์— ํƒ€์ž…์„ ์ถ”๊ฐ€

์ด ๋•Œ, ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์— ํƒ‘์ž…์„ ์ •ํ•˜์ง€ ์•Š์„๋•Œ๋Š” `void`๋ผ๋„ ์‚ฌ์šฉ

ํ•จ์ˆ˜์˜ ์ธ์ž

ts์—์„œ๋Š” ํ•จ์ˆ˜์˜ ์ธ์ž๋ฅผ ๋ชจ๋‘ ํ•„์ˆ˜ ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด `undefined`๋‚˜ `null`์ด๋ผ๋„ ์ธ์ž๋กœ ๋„˜๊ฒจ์•ผํ•˜๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ •์˜๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ๋„˜์–ด ์™”๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด ์ •์˜๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ์ถ”๊ฐ€๋กœ ์ธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ

function sum(a: number, b: number): number {
  return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // error, too few parameters

์ •์˜๋œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋งŒํผ ์ธ์ž๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ๊ณผ ๋ฐ˜๋Œ€๋œ๋‹ค. ๋งŒ์•ฝ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ์‚ด๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด `?`๋ฅผ ์ด์šฉํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜

function sum(a: number, b?: number): number {
  return a + b;
}
sum(10, 20); // 30
sum(10, 20, 30); // error, too many parameters
sum(10); // 10

REST ๋ฌธ๋ฒ•์ด ์ ์šฉ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜

function sum(a: number, ...nums: number[]): number {
  // 
  const totalOfNums = 0;
  for (let key in nums) {
    totalOfNums += nums[key];
  }
  return a + totalOfNums;
}

console.log(sum(1,2,3,4,5,6));
// a = 1, nums = [2,3,4,5,6]

this

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

function ํ•จ์ˆ˜๋ช…(this: ํƒ€์ž…) {
  // ...
}

์ฝœ๋ฐฑ์—์„œ์˜ this

์•ž์—์„œ ์‚ดํŽด๋ณธ ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ์˜ `this`์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฝœ๋ฐฑ์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์„ ๋•Œ์˜ `this`๋ฅผ ๊ตฌ๋ถ„ํ•ด์ค˜์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋Ÿด๋• ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

interface UIElement {
  // ์•„๋ž˜ ํ•จ์ˆ˜์˜ `this: void` ์ฝ”๋“œ๋Š” ํ•จ์ˆ˜์— `this` ํƒ€์ž…์„ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  addClickListener(onclick: (this: void, e: Event) => void): void;
}

class Handler {
    info: string;
    onClick(this: void, e: Event) {
        // `this`์˜ ํƒ€์ž…์ด void์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ `this`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
        console.log('clicked!');
    }
}
let handler = new Handler();
uiElement.addClickListener(handler.onClick);

Reference

https://velog.io/@soulee__/TypeScript-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%85%EB%AC%B8-1#2-typescript-%EA%B8%B0%EB%B3%B8-%ED%83%80%EC%9E%85-12%EA%B0%80%EC%A7%80

'Language > Typescript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TypeScript] Typescript Interface  (0) 2022.09.14
[Typescript] Typescript์˜ ์ดํ•ด  (0) 2022.09.08

๋Œ“๊ธ€