1 ๋ถ„ ์†Œ์š”

Typescript ๊ธฐ์ดˆ1 ๐Ÿ”‘

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ• ๋•Œ๋Š” type์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ์‹ค TS๊ฐ€ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ํ•˜๋‚˜ ์ „๋ถ€ ํƒ€์ž…์ง€์ •์„ ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.

let a = 'kk';
a = 123; // ERROR




ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•˜๊ธฐ ์• ๋งคํ• ๋•Œ

  • Union Type ์‚ฌ์šฉ
var ์–ด๋ ˆ์ด: (number | string)[] = [1, '2', 3];
var ์˜ค๋ธŒ์ ํŠธ: { data: number | string } = { data: '123' };
  • any ์‚ฌ์šฉ
let a: any;
a = 123;
a = 'asd';

let b: number = a; // NO ERROR

ํƒ€์ž…์ด ๋‹ฌ๋ผ๋„ ์—๋Ÿฌ๋ฅผ ๋„์šฐ์ง€์•Š๋Š”๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฑธ ๊ถŒ์žฅํ•œ๋‹ค.

  • unKnown ์‚ฌ์šฉ
let a: unknown;
a = 123;
a = 'asd';

let b: number = a; // ERROR

unknown์€ ์•„๋ฌดํƒ€์ž…์ด๋‚˜ ์ƒ๊ด€์—†์ด ๋˜์ง€๋งŒ ์ด๊ฒƒ์„ ๋Œ€์ž…ํ•˜๋ คํ• ๋•Œ๋Š” ์—๋Ÿฌ๋ฅผ ๋„์šด๋‹ค

(any๋Œ€์‹  unknown์„ ํ™œ์šฉํ•˜๋„๋ก ํ•˜์ž)




void

function a(x: number): void {
  1 + 1;
}

return์„ ํ•˜์‹œ๋Š”๊ฒƒ์„ ์˜ˆ๋ฐฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

function a(x: number): number {
  return x + 1;
}

a(3); // ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜

function a(x?: number): number {
  return x + 1;
}

a(); // ๊ฐ€๋Šฅ

x?: number๋Š” x: number | undefined์™€ ๊ฐ™๋‹ค.




Type Narrowing

function a(x: number | string) {
  if (typeof x === 'string') {
    return x + '1';
  } else {
    return x + 1;
  }
}

if๋ฌธ์œผ๋กœ ํƒ€์ž…์„ ํ•˜๋‚˜๋กœ ํ™•์ •์ง€์–ด ์ค€๋‹ค.

( in, instanceof ์œผ๋กœ๋„ ๊ฐ€๋Šฅ )

(Array.isArray(x.subject))




Type Assertion

function a(x: number | string) {
  let array: number[] = [];
  array[0] = x as number;
}

x๋ฅผ number๋กœ ๋ฎ์–ด ์”Œ์›Œ์ค€๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฑธ ๋‚จ์šฉํ•˜๋ฉด ๋น ๋”ฐ๋ฅผ ๋งž๋Š”๋‹ค.

  1. narrowing์„ ํ• ๋•Œ ์ฆ‰ ํƒ€์ž…์„ ํ™•์ •์ง€์„๋•Œ๋งŒ ์‚ฌ์šฉ.
  2. ์–ด๋–ค ํƒ€์ž…์ด ๋“ค์–ด์˜ฌ์ง€ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ์„๋•Œ๋งŒ ์‚ฌ์šฉ.
  3. ๋น„์ƒ์šฉ์œผ๋กœ๋งŒ.




Type Aliases

type Animal = string | number | undefined;
let ๋™๋ฌผ: Animal;

์œ„์™€๊ฐ™์ด ํƒ€์ž…์„ ๋ณ€์ˆ˜ํ™”ํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์„ ํƒ€์ž…์—˜๋ฆฌ์–ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.

( ๋Œ€๋ฌธ์ž๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์ด ๊ตญ๋ฃฐ์ด๋‹ค. )

type a = string;
type b = numbers;
type c = a | b;

์ด๊ฒƒ๋„ ๊ฐ€๋Šฅ

type PositionX = { x: number };
type PositionY = { y: number };
type XandY = PositionX & PositionY;
let ์ขŒํ‘œ: XandY = { x: 1, y: 2 };

์ด๋ ‡๊ฒŒ๋„ ๊ฐ€๋Šฅ

type a = (a: string) => number;

let b: a = () => {};




readonly

type Girlfriend = {
  readonly name: string;
};

let ์—ฌ์นœ: Girlfriend = {
  name: '์— ๋ฒ„',
};

์—ฌ์นœ.name = '์œ ๋ผ'; //readonly๋ผ์„œ ์—๋Ÿฌ

JS์—์„œ๋Š” const๋กœ object์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋œจ์ง€ ์•Š์ง€๋งŒ

TS์—์„œ๋Š” readonly๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋œจ๊ฒŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์—…๋ฐ์ดํŠธ: