๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“˜TypeScript

[TypeScript] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ž€? ๊ธฐ๋ณธ ๊ณต๋ถ€ํ•˜๊ธฐ

by Tamii 2021. 5. 30.
๋ฐ˜์‘ํ˜•

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉด์„œ ๋ณ€์ˆ˜ ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

JavaScript : dynamic typing ๋™์  ํƒ€์ดํ•‘ ์–ธ์–ด

TypeScript : ์ •์ ํƒ€์ดํ•‘์ด ๋ชฉ์  => ์ฝ”๋“œ์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์ปดํŒŒ์ผ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ ์ค‘์— ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

- ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 

- ์ปดํŒŒ์ผ ํƒ€์ž„์˜ ์˜ค๋ฅ˜๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์Œ 

- ์ปดํŒŒ์ผ ๋˜์–ด์•ผ ํ•จ

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋  ์ˆ˜  ์—†์Œ 

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ๋˜์–ด์•ผ ํ•œ๋‹ค.

 


ํƒ€์ž… ์ถ”๋ก  

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํƒ€์ž…ํ‘œ๊ธฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜์—ฌ a๊ฐ€ ์ž๋™์œผ๋กœ ์ˆซ์ž๊ฐ€ ๋œ๋‹ค

๋ฐ‘์—์„œ ์ˆซ์ž์ธ a์— ๋ฌธ์ž๋ฅผ ํ• ๋‹นํ•˜๋ คํ•˜๋‹ˆ ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๊ฐ€ ๋œฌ๋‹ค.

 

ํƒ€์ž…ํ‘œ๊ธฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ํƒ€์ž…์„ ์ถ”๋ก ํ•œ๋‹ค.

 

 

ํƒ€์ž… ๋ช…์‹œ

๋ณ€์ˆ˜๊ฐ’์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •

const x: number  

x๋ณ€์ˆ˜ : ์ˆซ์ž

let studentId: number = 1234;
let studentName:string= 'hi';

function str2num(a: number): object{
    return {a:'hi'}
}

 

 

type ๊ณผ interface ?

์ธํ„ฐํŽ˜์ด์Šค or type  ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž

interface Point {
    x: number;
    y: number;
}

type Point = {
    x: number;
    y: number;
};
interface IFn {
    (name:string) : string
}

type IFn = (name:string) => string;

 

interface 

๊ฐ์ฒดํƒ€์ž…์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ -> ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅ 

type

function ํ‘œ์—์„œ interface๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ์„ ์–ธ ๊ฐ€๋Šฅ

 

๐Ÿ˜ฎ ์–ด๋–ค ๊ฒƒ์ด ๋” ์ข‹์„์ง€? 

์žฌ๊ท€์ ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์†์„ฑ์„ ๋จธ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— type์€ merge ์‹œ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

ํ•ฉ์„ฑ์ž์ฒด์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ์„ ํŒ๋‹จํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ ์ƒ๋Œ€์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๋‹ค. 

์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” interface๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค  ( ๊ฐ์ฒด์—์„œ๋งŒ ์“ฐ์ด๋Š” ์šฉ๋„๋ผ๋ฉด..)

 

ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— type๊ณผ interface์ค‘ ํ•˜๋‚˜๋ฅผ ํ†ต์ผํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์ถœ์ฒ˜ : https://yceffort.kr/2021/03/typescript-interface-vs-type

 

 

interface์— ์ •์˜ํ•˜๊ธฐ 

* ์„ ํƒ์  property

๋ฌผ์Œํ‘œ๋กœ ํ‘œ์‹œํ•˜๋ฉด ์žˆ์–ด๋„ ์—†์–ด๋„ ๋˜๋Š” property์ง€์ • ๊ฐ€๋Šฅ 

interface Student {
  id: number;
  name: string;
  age?: number;
}

* ๋ฉ”์„œ๋“œ property์ •์˜ ๊ฐ€๋Šฅ

interface Student {
  id: number;
  name: string;
  age?: number;
  addComment: (comment: string) => string;
}

* readonly

์ฝ๊ธฐ์ „์šฉ์œผ๋กœ ์ง€์ •๋œ ์†์„ฑ์€ ์ˆ˜์ •๋  ์ˆ˜ ์—†์Œ

 

 

์‹ค์ œ interface๋Š” ์ปดํŒŒ์ผ๋œ javascript ํŒŒ์ผ์— ์—†์Œ

์ฝ”๋“œ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ  ์˜ํ–ฅ๋ ฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™˜๋˜์ง€๋Š” ์•Š์Œ

 


Enum

enum GenderType {
  Male,
  Female,
}
function getStudentDetails(id: number): Student {
  return {
    id: 1,
    name: 'tami',
    gender: GenderType.Male,
  };
}

 

var GenderType;
(function (GenderType) {
    GenderType[GenderType["Male"] = 0] = "Male";
    GenderType[GenderType["Female"] = 1] = "Female";
})(GenderType || (GenderType = {}));

enum์— ์ž‡๋Š” ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋Œ๋ฉฐ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹

์ฆ‰ GenderType์˜ enum์€ ์ˆซ์ž ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ 

 

 

String enum

interface Student {
  readonly id: number;
  name: string;
  age?: number;
  gender: GenderType;
  addComment?: (comment: string) => string;
}

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํžˆ ๋ฌธ์žํ˜• enum๋„ ๊ฐ€๋Šฅ

 

 

๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…

interface Student {
  readonly id: number;
  name: string;
  age?: number;
  gender: 'male' | 'female';
  addComment?: (comment: string) => string;
}

๋” ๊ฐ„ํŽธํ•˜๊ฒŒ | ๋กœ ํ•ด๋‹น ์†์„ฑ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ์ง€์ • ๊ฐ€๋Šฅ 

 

ํƒ€์ž…์— ๊ด€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์ œ๊ณต๋ ์ˆ˜๋ก ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌ๋จ

์ฝ”๋“œ๊ฐ€ ํšจ๊ณผ์ ์œผ๋กœ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋จ

---> any ํƒ€์ž…์˜ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™” ํ•˜๋Š”๊ฒŒ ์ข‹์Œ

 

 

์œ ๋‹ˆ์–ธ ํƒ€์ž… 

const someValue : string | number

type Gurad

์œ ๋‹ˆ์–ธ ํƒ€์ž…์„ ์‚ฌ์šฉํ• ๋•Œ, typeof ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

 

type Alises

๋ช‡๊ฐ€์ง€ type์„ ๊ฐ€์ง„ props ์ง€์ • ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ 

type strOrNum = number | string;

const setValue = (value : strOrNum):strOrNum =>{
	return value;
}

ํ•จ์ˆ˜ํ˜• ํƒ€์ž… 

ํ•จ์ˆ˜์— ์ •์˜๋œ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ • 

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ „๋ถ€ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๋•Œ ์˜ค๋ฅ˜

์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜

๋ช‡๊ฐ€์ง€๋งŒ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ผ๋•Œ  ? ๋ถ™์—ฌ์„œ ํ‘œ์‹œ ๊ฐ€๋Šฅ

function sendGreeting(a: string, b?: string): void {
  console.log(`${a} ${b}`);
}

sendGreeting('h', 'h');
sendGreeting('h');

์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•„์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋’ค์— ์„ ์–ธ๋˜์•ผํ•จ 

 

๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜์˜ default๊ฐ’ ์ง€์ •

function sendGreeting(a: string, b = 'there'): void {
  console.log(`hi ${a}, ${b}`);
}

์ ‘๊ทผ์ œํ•œ์ž Acess Modifier

ํด๋ž˜์Šค์† ๋ฉค๋ฒ„๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์ž‡๋Š” 

 

 

 

์ฐธ๊ณ  (https://www.youtube.com/watch?v=VJ8rvsw2j5w)

'๐Ÿ“˜TypeScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Next.js] #1 TypeScript๋กœ ์‹œ์ž‘ํ•˜๊ธฐ  (0) 2021.07.22

๋Œ“๊ธ€