#2 Overview of TypeScript

#2.0 How Typescript Works

TS ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด.

Strongly Typed Programming Language => ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ด์„œ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด TS => JS

TS๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•˜๋ฉด ์ปดํŒŒ์ผ์ด ์ค‘์ง€๋˜๊ณ , ์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•จ

=> ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์ž˜๋ชป๋œ ๋ถ€๋ถ„์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Œ

#2.1 Implicit Types vs Explicit Types

TS์˜ ํƒ€์ž… ์‹œ์Šคํ…œ - ํƒ€์ž… ์ถ”๋ก , ๋ช…์‹œ์  ์„ ์–ธ

let a = "hello" // let a : string
a = "bye"

a = 1 // error : type number is ~~
// ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ string์œผ๋กœ ํ–ˆ์œผ๋ฉด string์œผ๋กœ ๋ฎ์„ ์ˆ˜ ์žˆ์Œ
// JS๋Š” ๋ฌธ์ œ์—†์ง€๋งŒ TS์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋จ

let b : boolean = "x" // error : "x"๋Š” boolean์ด ์•„๋‹˜
// ํƒ€์ž…์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹, ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•จ
// ๋ช…์‹œ์  ์„ ์–ธ์€ ์ตœ์†Œํ™” ํ•˜๋Š”๊ฒŒ ์ข‹์Œ => ํƒ€์ž… ์ถ”๋ก ์„ ํ™œ์„ฑํ™”

let c = [1, 2, 3] // let c : number[]
c.push("1") // error : number array์— string์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํƒ€์ž…์ด ์„ž์ž„

#2.2 Types of TS part One

๊ธฐ๋ณธ ํƒ€์ž… - number / string / boolean / ...[]

Optional ์„ ํƒ์  ๋ณ€์ˆ˜

const player : {
    name: string,
    age?: number // => ? ๋Š” optional ์„ ํƒ์  ๋ณ€์ˆ˜
} = {
    name: "nico",
}

if(player.age && player.age < 10) { // undefined ์ธ ๊ฒฝ์šฐ๋„ ํ™•์ธ
    
}

type ์„ ์–ธ

// Alias ๋ณ„์นญ ํƒ€์ž… ์„ ์–ธ
type Age = number;
type Player = {
    name: string,
    age?: Age
}

const nico: Player = { 
    name: "nico"
}

const nicoco : Player = {
    name: "nicoco",
    age: 150
}

//////////////////////////////////

type Name = string
type Age = number
type Player = {
    name: Name,
    age?: Age
}

// ํ•จ์ˆ˜์— ํƒ€์ž… ์„ ์–ธ => argument์— ํƒ€์ž… ์„ค์ • & return value์— ํƒ€์ž… ์„ค์ •
function playerMaker(name: string) : Player { // < : Player ๋ถ€๋ถ„
    return {
        name
    }
}

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์ธ ๊ฒฝ์šฐ
const playMaker = (name: string) : Player => ({name})

const test = playerMaker("LEE")
test.age = 12

#2.3 Types of TS part Two

readonly - ์ฝ๊ธฐ ์ „์šฉ,, ์ตœ์ดˆ ์„ ์–ธ ํ›„ ์ˆ˜์ • ๋ถˆ๊ฐ€. immutability ๋ถ€์—ฌ => TS์—์„œ๋Š” ๋ณดํ˜ธ๋ฐ›์ง€๋งŒ JS์—์„œ๋Š” ์ ์šฉ ์•ˆ๋จ

type Age = number;
type Name = string;
type Player = {
    readonly name: Name // <= ์ฝ๊ธฐ ์ „์šฉ
    age?: Age
}

const playerMaker = (name:string) : Player => ({name})
const nic = playerMaker("nic")
nic.age = 12
nic.name = "name" // error

const numbers : readonly number[] = [1,2,3,4]
numbers.push(1) // error

Tuple - ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜์™€ ์ˆœ์„œ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์•ผํ•  ๋•Œ ์‚ฌ์šฉ, readonly ์‚ฌ์šฉ ๊ฐ€๋Šฅ

const player1: [string, number, boolean] = [] // error
const player2: [string, number, boolean] = ["nic", 1, true]
const player3: readonly [string, number, boolean] = ["nic", 1, true]
player3[0] = "aa" // error

undefined, null, any ํƒ€์ž…

let a : undefined = undefined // ์„ ์–ธX ํ• ๋‹นO
let b : null = null // ์„ ์–ธO ํ• ๋‹นใ…Œ
let c : any = any // TS์—์„œ ๋น ์ ธ๋‚˜์˜ค๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ, ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž

#2.4 Types of TS part Three

TS์—๋งŒ ์žˆ๋Š” ํƒ€์ž…๋“ค

unknown - ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ๋ชจ๋ฅด๋Š” ๋ฐ์ดํ„ฐ

let a : unknown;

let b = a + 1; // error => a๊ฐ€ number์ธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ

////

if(typeof a === 'number'){ // a ์˜ ํƒ€์ž…์ด number ์ผ ๋•Œ
    let b = a + 1
}

if(typeof a === 'string'){ // a ์˜ ํƒ€์ž…์ด string ์ผ ๋•Œ
    let b = a.toUpperCase()
}

void - ์•„๋ฌด๊ฒƒ๋„ return ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜. ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ์•Œ์•„์„œ ์ ์šฉ๋จ

function hello() {console.log('x')}

const a = hello()
a.toUpperCase() // error toUpperCase ๊ฐ€ ์—†์Œ

never ใ„ด ํ•จ์ˆ˜๊ฐ€ ์ ˆ๋Œ€ returnํ•˜์ง€ ์•Š์„๋•Œ - ํ•จ์ˆ˜์˜ exception์ด ๋ฐœ์ƒํ• ๋•Œ

function hello(): never {
    throw new Error("xxx")
}

function bye(name: string|number){
    if(typeof name === "string"){
        name // string
    }else if (typeof name === "number"){
        name // number
    }else{
        name // never
    }
}

Last updated

Was this helpful?