오늘도 코딩하나

[Typescript] 타입스크립트로 블록체인 만들기_(2) 본문

Typescript/Lecture

[Typescript] 타입스크립트로 블록체인 만들기_(2)

오늘도 코딩하나 2025. 1. 6. 15:23

https://nomadcoders.co/typescript-for-beginners

 

타입스크립트로 블록체인 만들기 – 노마드 코더 Nomad Coders

Typescript for Beginners

nomadcoders.co

 

강의 내용 요약
#2.1 ~ #2.4

 

1️⃣ Typescript의 타입 시스템

   (1) Javascript처럼 변수만 생성하기

let a = "hello"
a = "bye"
// Type 'number' is not assignable to type 'string'.
a = 1
  • Typescript가 타입을 추론해준다.
    → a = "hello"라고 정의해줬고, Typescript가 a는 string이라고 추론했다.
    그에 따라 a = 1 숫자를 입력하니 오류가 발생한다.

   (2) 데이터와 변수의 타입 명시적으로 정의하기

let b: boolean = true
b = false
// Type 'string' is not assignable to type 'boolean'.
b = "tistory"

let c : number[] = []
// Argument of type 'string' is not assignable to parameter of type 'number'.
c.push("1")
  • 아무리 Typescript가 추론을 해준다고 해도 직접 정의를 해주는게 좋다!

2️⃣ optional parameter

player라는게 있고 player 중 몇몇은 age가 있고 몇몇은 age가 없지만 모두 name을 가지고 있다고 생각해보자

 

const player : object = {
    name : "tistory"
}

// Property 'name' does not exist on type 'object'.
player.name
  • player를 object로 설정하면 그 안에 name 값을 가져오지 못한다.
const player : {
    name : string,
    age? : number
} = {
    name : "tistory"
}

if(player.age && player.age < 10) { }
  • player에 대한 타입은 위와 같이 작성하면 된다
  • 필수 파라미터가 아닌 선택적 파라미터에는 '?'를 붙여준다.
    ? : number | undefined

3️⃣ alias 타입 생성 방법 

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

const player1 : Player = {
    name : "tistory"
}

const player2 : Player = {
    name : "naver",
    age : 26
}
  • 같은 타입으로 player1, player2를 만드는 경우에는 alias 타입을 생성하면 된다.(type Player)

4️⃣ argument / return 값의 타입 지정 방법

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

function palyerMaker(name:string) : Player {
    return {
        name: name
    }
}

const palyerMaker2 = (name:string) : Player => ({name})

const tistory = palyerMaker("tistory")
tistory.age = 19
  • argument의 타입 지정 방법 → (name:string)
  • return값의 타입 지정 방법   → : Player
  • playerMaker   : 일반 함수형
  • playerMaker2 : 화살표 함수형

5️⃣ Readonly

const numbers : readonly number[] = [1, 2, 3, 4]
// Property 'push' does not exist on type 'readonly number[]'.
numbers.push(1)
  • readonly 상태에서는 Typescript가 수정못하게 막는다.

6️⃣ Tuple

  • 배열처럼 여러 값을 가질 수 있다.
    각각의 값이 고정된 순서와 타입을 가질 수 있도록 정의한다.
  • 길이가 고정된다.
  • 특정 위치에 특정 타입이 있어야 한다.
const player : [string, number, boolean] = ["nico", 1, true]
player[0] = "hi"
  • 길이가 3개로 고정되었고,
    player[0]=string, player[1]=number, player[2]=boolean 타입이 고정되었다.
  • const player : readonly [string, number, boolean] = ["nico", 1, true]
    readonly를 쓰면 두번째 줄에서 오류 발생한다.

   * undefined, null도 설정 가능하다.

let a : undefined = undefined
let b : null = null

7️⃣ any

  • Typescript로부터 빠져나오고 싶을 때 쓰는 타입
  • 비어있는 값들을 쓰면 기본값이 any
  • any를 쓰면 일반 JS가 되고 typescript로부터의 보호장치를 잃어버린다.
const a : any[] = [1, 2, 3, 4]
const b : any = true
a + b

8️⃣ unknown

let a : unknown;

if(typeof a === 'number') {
    let b  = a + 1
}

if(typeof a === "string") {
    let b = a.toUpperCase();
}
  • if문으로 typeof를 해주지 않으면 오류 발생

9️⃣ void

   ※ void : 아무것도 return하지 않는 함수

  • void를 따로 지정해줄 필요 없다.
  • Typescript는 이 함수가 아무것도 return하지 않는다는 것을 자동으로 인식한다.
  • 원하면 써도 void 써줘도 되지만 필요하진 않다.
function hello() {
    console.log('x')
}

const a = hello();
// Property 'toUpperCase' does not exist on type 'void'.
a.toUpperCase();
  • return값이 없기 때문에 a.toUpperCase()와 같은 함수를 사용하면 에러가 발생한다.

🔟 never

   ※ never : 함수가 절대 return하지 않을 때 발생

  • 예를 들면, 함수에서 exception(예외)가 발생할 때 사용
  • 거의 사용하지 않는다.
function hello() : never {
    return "X"
}

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