[TypeScript] 입문

제론·2022년 6월 12일
0
post-thumbnail

타입스크립트

왜? 만들어졌는가

  1. 타입 안정성을 위해서
  • 왜? 만들어졌는가
    -> 런타임 에러(콘솔에서 일어나는 에러)가 줄어든다
    -> JS는 코드 실행 에러가 날거라고 얘기해주지 않음

  • 자바스크립트는 유연한 언어
    -> 에러를 보여주지 않으려고 함
    [1, 2, 3, 4] + false // ‘1, 2, 3, 4,false’

함수의 인수의 개수와 인수의 데이터 타입도 확인해줌

  • 타입스크립트 동작
    TS -> 컴파일 -> JS
    컴파일 되기 전 에러가 예상되는 코드가 발견되면 컴파일이 진행되지 않음
  • 타입 추론
  1. 명시적 표현
    데이터와 변수의 타입을 명시적으로 정의 가능
    명시적 표현은 최소한으로 사용하는 것이 좋음(코드를 많이 쳐야하기 때문에)
  2. 타입 추론
    그냥 변수만 선언도 가능
  • optional type(선택적 매개변수)
const player : {
    name: string,
    age: number,
} = {
    name: 'chan',
    age: 19
}

타입 별칭

// type alias

type Age = number
type Name = string
type Player = {
    name: Name,
    age?: Age    
}
  • 물음표는 선택 사항을 표시

함수의 리턴값의 type을 지정

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

화살표 함수일 때

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

다양한 타입

readonly

  • 수정 불가능, 읽는 것만 가능!
type Age = number
type Name = string
type Player = {
    readonly name: Name,
    age?: Age
}
const playerMaker = (name:string) :Player => ({name})
const chan = playerMaker('zerone')

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


### Tuple과 undefined, null, any

```ts
// array 생성, 최소한의 길이를 가져야하고 특정위치에 특정 타입이 있어야함!
// 활용: API가 return하는 값으로 특정한 배열을 줄 수 있음
const player : readonly [string, number, boolean] = ['zerone', 2, true]
player[0] = "hi"

// undefined, null, any
let a: undefined = undefined
let b: null = null
let c = [] // any 타입 - 아무 타입이나 될 수 있음, 타스에 보호장치로부터 제외할 수 있음

void, never, unknown

  • void: 아무것도 return하지 않는 함수를 대상으로 사용, return 값을 따로 지정하지 않은 함수는 void를 반환함(void는 empty를 의미)
  • unknown: 변수의 타입을 미리 알지 못할 때 unkown을 통해 추가적으로 강제적인 확인 작업을 거친다.
  • never: 함수가 절대 return 않을 때 발생함, return하지 않고 오류를 발생시키는 함수를 만들 때 사용
let a: unknown

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

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

    // return 하지 않고 오류를 발생시키는 함수
function bye():never {
    throw new Error("error!")
}

function say(name:string|number) {
    if(typeof name === "string") {
        name // 타입: stirng
    } else if (typeof name === "number") {
        name // 타입: number
    } else {
        name // 타입 never, 에러가 나면 실행됨
    }
}
  • if 조건문을 이용해서 type에 따른 로직처리가 가능!
  • TS 보고 느낀점, 코드가 멋있어진다.
  • 근데 생각할게 더 많아 보이고, 코드가 길어질 수 있겠다는 생각이 든다.
  • 처음 설계를 잘해할 것 같은데, 사용한다면 코드의 유지보수가 잘 될 것 같다..!

노마드 코더 타입스크립트로 블록체인 만들기 강좌

profile
Software Developer

0개의 댓글