๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ Study/๐Ÿงฉ TypeScript

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ & ๊ธฐ๋ณธ ํƒ€์ž…

 

๐Ÿ’ก Udemy ์˜ Typescript : ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „ํ˜• ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ๊ฐ•์˜ ์Šคํ„ฐ๋””์—์„œ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ—“ ์Šคํ„ฐ๋”” ๋‚ ์งœ : 22.05.29

# ์ •์  ํƒ€์ž… ์–ธ์–ด VS ๋™์  ํƒ€์ž… ์–ธ์–ด

1. ๋™์  ํƒ€์ž… ์–ธ์–ด

  • ์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ธ ๋Ÿฐํƒ€์ž„ ์‹œ ํƒ€์ž…์„ ์ฒดํฌํ•˜๊ณ  ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•  ๋•Œ ํƒ€์ž… ์„ ์–ธ์ด๋‚˜ ํƒ€์ž…์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ง€ํ‚ฌ ํ•„์š”๊ฐ€ ์—†์–ด ์ƒ๋Œ€์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์งง์œผ๋ฉฐ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค.
  • ํƒ€์ž…์„ ๋ช…์‹œ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์ •์  ํƒ€์ž… ์–ธ์–ด์— ๋น„ํ•ด ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ ๋‚ด์—์„œ ํƒ€์ž…์„ ์œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ์ฝ์„๋•Œ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋ฉฐ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ข‹์ง€ ์•Š๋‹ค.
  • ex ) JavaScript

2. ์ •์  ํƒ€์ž… ์–ธ์–ด

  • ์ปดํŒŒ์ผ ์‹œ ์ฝ”๋“œ์˜ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ํƒ€์ž…์ด ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ํƒ€์ž…์„ ์ฒดํฌํ•จ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ์— ๋ฏธ๋ฆฌ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ํƒ€์ž… ์–ธ์–ด๋ณด๋‹ค ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ํƒ€์ž…์ด ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ํƒ€์ž… ์–ธ์–ด์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค.
  • ๋‹ค์ˆ˜์˜ ํ˜‘์—…์ด๋‚˜ ํ”„๋กœ์ ํŠธ์˜ ์žฅ๊ธฐ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋งค๋ฒˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•  ๋•Œ๋งˆ๋‹ค ํƒ€์ž…์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€๊ณผ ๊ทธ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ex ) TypeScript

 

# ํƒ€์ž…์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•

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

โœจ ๋ณ€์ˆ˜

const foo: string = 'hello';

โœจ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜๊ฐ’

function foo(param: string): void => {
	console.log(param);
}

 

# TypeScript ์˜ ํƒ€์ž… ์ข…๋ฅ˜

  • TypeScript ๋Š” ES5, ES6์˜ Superset์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž…๋“ค๊ณผ TypeScript์—์„œ ์ถ”๊ฐ€๋œ ๊ณ ์œ  ํƒ€์ž…๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JavaScript Type : boolean, null, undefined, number, string, symbol, object
  • TypeScript Type : array, tuple, enum, any, void, never

 

# ๊ธฐ๋ณธ ํƒ€์ž…

โš ๏ธ TypeScript์˜ ๋ชจ๋“  ํƒ€์ž…์€ ์†Œ๋ฌธ์ž๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ex ) number(O) Number(X)

โœจ boolean

let isSelected: boolean = false;
  • true ์™€ false ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ธฐ๋ณธ ํƒ€์ž…

โœจ number

const decimal: number = 5;
const hex: number = 0xf00d;
const binary: number = 0b111;
const octal: number = 0o124;
  • JavaScript ์™€ ๊ฐ™์ด TypeScript ์—์„œ๋„ ๋ชจ๋“  ์ˆซ์ž๋Š” int, double ๊ณผ ๊ฐ™์€ ์ •์ˆ˜, ์‹ค์ˆ˜ ํƒ€์ž…์˜ ๊ตฌ๋ถ„ ์—†์ด ๋ชจ๋‘ number ํƒ€์ž…์ด๋‹ค.
  • ๋ชจ๋“  ์ˆซ์ž๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์  ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.
  • TypeScript 3.2 ๋ฒ„์ „์— ๋˜ ๋‹ค๋ฅธ ์ˆซ์ž ํƒ€์ž…์ธ **bigInt ํƒ€์ž…**์ด ์ถ”๊ฐ€๋๋‹ค.

โœจ string

const text1: string = "์ด๊ฑด ๋ฌธ์ž์—ด ํƒ€์ž…";
const text2: string = '์ด๊ฒƒ๋„ ๋ฌธ์ž์—ด ํƒ€์ž…';

const num: number = 2022;
const text3: string = '์˜ฌํ•ด๋Š” ' + number + '๋…„์ด๋‹ค.'
const text4: string = `์˜ฌํ•ด๋Š” ${number}๋…„์ด๋‹ค.`

โœจ array

const hobbies: string[] = ['sleeping', 'reading a book'];
const hobbies: Array<string> = ['sleeping', 'reading a book'];
  • ๋ฐฐ์—ด ํƒ€์ž…์€ ์œ„์™€ ๊ฐ™์ด ๋ฐฐ์—ด ์š”์†Œ๋“ค์˜ ํƒ€์ž… ๋’ค์— [] ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ œ๋„ค๋ฆญ ๋ฐฐ์—ด ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœจ tuple

// 1. ํŠœํ”Œ ํƒ€์ž…์œผ๋กœ ์„ ์–ธ
let tupleData: [string, number, boolean];

// 2. ์ดˆ๊ธฐํ™”
tupleData = ["hemudi", 96, false];

// 3. Error
tupleData = ["hemudi", 96];
tupleData = [false, 96];
tupleData = [];
  • ํŠœํ”Œ ํƒ€์ž…์€ ์š”์†Œ๋งˆ๋‹ค ์ƒ์ดํ•œ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์ •๋œ ๋ฐฐ์—ด์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • push์™€ pop ๋“ฑ์œผ๋กœ ์ธํ•œ ๋ฐ์ดํ„ฐ ํ›ผ์†์€ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์—†์Œ.

โœจ enum

// 0, 1, 2
enum Job {STUDENT, TEACHER, DEVELOPER}

// student, teacher, developer
enum Job {STUDENT = 'student', TEACHER = 'teacher', DEVELOPER = 'developer'} 

// student, 0, 1
enum Job {STUDENT = 'student', TEACHER, DEVELOPER} 

// student, 0.5, 1.5
enum Job {STUDENT = 'student', TEACHER = 0.5, DEVELOPER} 

// Error - DEVELOPER ์ดˆ๊ธฐํ™” ํ•„์š”!
enum Job {STUDENT = 'student', TEACHER = '0', DEVELOPER}

// use
const myJob: Job = Job.STUDENT;

const yourJob: Job = Job[3];
console.log(yourJob); // DEVELOPER
  • ์—ด๊ฑฐํ˜•์œผ๋กœ ์ด๋ฆ„์ด ์žˆ๋Š” ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœจ Any

let foo: any = 10;
foo = 'string type';
foo = false;

foo.charAt(1); // error ๊ฐ€ ์•ˆ๋‚จ
  • ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค!
  • ์•Œ์ง€ ๋ชปํ•˜๋Š” ํƒ€์ž…์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ผ๋ถ€๋งŒ ์•Œ๊ณ  ์ „์ฒด๋Š” ์•Œ์ง€ ๋ชปํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํƒ€์ž…์ด ์„ž์ธ ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ
    • const list: any[] = [1, true, “string data”];

โœจ Void

function foo(): void {
	console.log('void type');
}

let data: void = undefined;
data = null; // --strictNullChecks ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„๋•Œ ์„ฑ๊ณต
  • void๋Š” ์–ด๋–ค ํƒ€์ž…๋„ ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ any ๋ฐ˜๋Œ€ ํƒ€์ž…๊ณผ๋„ ๊ฐ™๋‹ค.
  • void๋Š” ๋ณดํ†ต ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์„ ๋•Œ ์ฃผ๋กœ ์“ฐ์ธ๋‹ค.
  • void๋กœ ํƒ€์ž…์˜ ๋ณ€์ˆ˜์—๋Š” null ๊ณผ undefined ๋งŒ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โœจ unknown

let userInput: unknown;
let userName: string;

userInput = 5;
userInput = 'Max';

userName = userInput; // error

if(typeof userInput === 'string'){
    userName = userInput;
}
  • ์•Œ ์ˆ˜ ์—†๋‹ค!
  • any ์™€ ๊ฐ™์ด ์•Œ์ง€ ๋ชปํ•˜๋Š” ํƒ€์ž…์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • any ์™€ ๋‹ค๋ฅธ ์ ์€ typeof ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํƒ€์ž…์„ ํŠน์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

โœจ Never

// never๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค.
function error(message: string): never {
    throw new Error(message);
}

// ๋ฐ˜ํ™˜ ํƒ€์ž…์ด never๋กœ ์ถ”๋ก ๋œ๋‹ค.
function fail() {
    return error("Something failed");
}

// never๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค.
function infiniteLoop(): never {
    while (true) {
    }
}
  • never ํƒ€์ž…์€ ์ ˆ๋Œ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…์„ ๋‚˜ํƒ€๋ƒ„.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด๋‚˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ ์ ˆ๋Œ€ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉ๋จ.
  • ๋ณ€์ˆ˜ ๋˜ํ•œ ํƒ€์ž… ๊ฐ€๋“œ์— ์˜ํ•ด ์•„๋ฌด ํƒ€์ž…๋„ ์–ป์ง€ ๋ชปํ•˜๊ฒŒ ์ขํ˜€์ง€๋ฉด never ํƒ€์ž…์„ ์–ป๊ฒŒ ๋จ.

 

# ์œ ๋‹ˆ์–ธ ํƒ€์ž…๊ณผ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…

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

let input: number | string = 'test';
input = 10;
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ข…๋ฅ˜์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ดํ”„๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€๋Šฅํ•œ ํƒ€์ž…๋“ค์„ ๋‚˜์—ดํ•˜์—ฌ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

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

type Easing = "ease-in" | "ease-out" | "ease-in-out";
const easeIn : Easing = 'ease-in';

type Dice = 1 | 2 | 3 | 4 | 5 | 6;
const one : Dice = 1;
  • ์ƒ์ˆ˜์™€ ๊ฐ™์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’๋“ค์„ ํ• ๋‹นํ•˜๋Š” ํƒ€์ž…

 

# Type Alias ์™€ Object Type

โœจ Type Alias

type Person = {
    name: string;
    age: number | bigint;
    job: Job;
    hobbies: string[];
}

const hemudi: Person = {};
const hemudi = {} as Person;
  • ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋น„์Šทํ•˜๊ฒŒ ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฃผ๋กœ ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ง€์ •ํ•  ๋•Œ ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฑฐ ๊ฐ™๋‹ค.

โœจ Object Type

const person : object = {
	name: 'hemudi',
	age: 27
}

console.log(person.name); // Error
  • ๊ฐ์ฒด์˜ ํƒ€์ž…์„ Object๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ์ƒˆ๋กœ ์ •์˜ํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
  • object ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋Š” ํ•ด๋‹น ๊ฐ์ฒด์— object ์†์„ฑ ์™ธ ์–ด๋–ค ์†์„ฑ์ด ์กด์žฌํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Type Alias๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋”ฐ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•Œ์•„์„œ ์ถ”๋ก ํ•˜๋„๋ก ๋‚ด๋ฒ„๋ ค ๋‘ฌ์•ผ ํ•œ๋‹ค.

 

# ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์—์„œ void ์™€ undefined ์˜ ์ฐจ์ด

function test : void {
	console.log('์„ฑ๊ณต!');
}

function test : undefined{
	console.log('์‹คํŒจ!');
} 

function test: undefined{
	console.log('์„ฑ๊ณต!');
	return;
}
  • ํ•จ์ˆ˜๊ฐ€ ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•  ๋•Œ void์™€ undefined๋ฅผ ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฐจ์ด์ ์œผ๋กœ๋Š” void๋Š” ์ •๋ง ์•„๋ฌด๊ฒƒ๋„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— return ๋ฌธ์„ ๋ช…์‹œํ•  ํ•„์š” ์—†์ง€๋งŒ undefined๋Š” undefined๋ผ๋Š” ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๋ช…์‹œ์ ์œผ๋กœ return์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

# Union ๋งค๊ฐœ๋ณ€์ˆ˜ Error

function combine(input1: number | string, input2: number | string){
	let result = input1 + input2;  // Error!!
    return result;
 }
  • ์œ„์™€ ๊ฐ™์ด ๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ number์™€ string์˜ ์œ ๋‹ˆ์–ธ ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•˜๊ณ  + ์—ฐ์‚ฐ์„ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด Error ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๊ฐ€ Union ํƒ€์ž…์ด๋ผ๋Š” ๊ฑด ์•Œ์•„๋„ ๋ช…ํ™•ํžˆ ํ•ด๋‹น ๊ฐ’์ด Union์˜ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” Error ๋ผ๊ณ  ํ•˜๋Š” ๋“ฏ?
  • ์•„๋ž˜์™€ ๊ฐ™์ด ํƒ€์ž…์„ ํŠน์ • ์ง€์–ด์ค˜์•ผ ํ•œ๋‹ค.
 
 function combine(input1: number | string, input2: number | string){
 	let result;
    
 	if (typeof input1 === "number" && typeof input2 === "number") {
    		result = input1 + input2;
  	} else {
    		result = input1.toString() + input2.toString();
  	}
    
  	return result;
 }

 


# ์ฐธ๊ณ