BaGyun
빠균's 개발노트
BaGyun
전체 방문자
오늘
어제
  • 분류 전체보기 (71)
    • Today I Learned (44)
      • 오류 (8)
      • JavaScript (15)
      • TypeScript (9)
      • NodeJS (0)
      • NestJS (0)
      • Database (3)
      • ORM (1)
      • 알고리즘 (2)
      • 개인공부 (4)
      • Deploy (0)
      • Git (1)
    • 개인프로젝트 (4)
    • 알고리즘 (14)
      • 프로그래머스 (14)
    • 면접질문 (5)
    • 회고 (3)

인기 글

반응형

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.
BaGyun

빠균's 개발노트

Today I Learned/TypeScript

[TypeScript] Nomad Coder - TypeScript 2주 챌린지(2일차)

2022. 7. 26. 08:16

타입스크립트의 타입들

우선 object의 타입을 정의해줄 때, 선택적 변수를 지정하는 방법은 아래 예시와 같다.

const player : {
  name: string,
  age?: number, // optional하게 사용하고 싶은 값에 ?를 붙여준다.
} = {
  name: "nico",
}

age의 경우 number | undefined 값을 주어주는데

if (player.age && player.age<10) { // player.age는 number 타입이라는 것을 명시함으로써 선택적 변수(optional parameter)를 지정해준다.

}

Alias Type

object에서 타입을 지정해줄 때, 여러 변수에 반복적으로 타입을 지정해줘야하는 경우 Alias(별칭) Type을 만들어준다.

// 첫글자는 대문자
type Name = string;
type Age = number;
type Player = {      type Player = { // 왼쪽과 오른쪽은 동일하다. 
  name: Name,           name: string,  // 이런 식으로 Alias 타입을 지정해줄 수 있다는 것을 보여주기 위함
  age?: Age             age?: number,  // 코드가 깔끔하고 명확해질 때까지만 이렇게 작업을 하면 된다.
}                     }

위 예시처럼, Alias 타입을 만들어서 여러 변수에 재사용할 수 있게끔 만들어 주는 것이다.

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

function playerMaker(name:string) : Player { // 미리 만든 Alias 타입으로 지정해준다
  return {
    name: name,   // name 만 적어도 무관하다.
  }
}

//화살표 함수로 표현하는 법
const playerMaker = (name:string) : Player => ({name})

const nico = playerMaker("nico")
nico.age = 12 // optional한 값을 지정해줄 수 있다.

readonly 속성

readonly 속성은 요소들을 '읽기 전용'으로 만들어 주는 것이다. JavaScript에서는 없는 동작으로 TypeScript에서만 사용 가능하다.

TypeScript의 보호장치가 있기 때문에 가능한 것이며, immutability(불변성)을 가지게 만든다.

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

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

const nico = playerMaker("nico")
nico.age = 12
nico.name = "las" // 오류가 발생한다. type Player에 readonly 속성을 넣어줌으로써, 수정이 불가하게끔 만들어준다.

Tuple Type

Tuple은 배열을 최소한의 길이를 가지게 하고 특정 위치에 특정 타입이 있게끔 만들어준다.

const player: [string, number, boolean] = ["nico", 1, true]
// player의 배열은 3개의 아이템을 가지게하고, string, number, boolean 순서대로여야 함을 알린다.

const player: readonly [string, number, boolean] = ["nico", 1, true]
// 이렇게 readonly의 속성도 사용할 수 있다.

any Type

any는 TypeScript의 보호 장치에서 벗어날 수 있게 해준다. 즉 JavaScript에서 사용했던거처럼 모든 것을 허용해준다는 의미

const a : any[] = [1, 2, 3, 4]
const b : any = true

a + b // '1,2,3,4true'

// 타입스크립트에서 자바스크립트처럼 작동한다.

자주 사용하는 것은 좋지 않으나, 탈출구가 존재한다는 것을 알고 있는 것이 좋다.

unknown Type

어떤 타입인지 모르는 변수는 TypeScript에게 어떻게 말해줘야 할까? 라는 의문이 생길 때 unknown을 붙여주면 된다.

let a: unknown;

if (typeof a === 'number') { // 이러한 조건문을 통해 a의 타입을 정해줌
  let b = a + 1
}
if (typeof a === 'string') {
  let b = a.toUpperCase();
}

void Type

아무것도 return 하지 않는 함수를 대상으로 사용한다.

보통 void를 따로 지정해줄 필요는 없다. TypeScript가 이 함수는 아무것도 return하지 않는다는 것을 자동으로 인식한다.

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

never Type

많이 사용하진 않지만 never는 함수가 절대 retrun 하지 않을 때 발생한다.

함수에서 exception(예외)이 발생할 때 또는 타입이 두가지 일 수도 있는 상황에 발생할 수 있다.

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

function hello (name:string|number) {
  if (typeof name === "string") {
    name // string Type
  } else if (typeof name === "number") {
    name // number Type
  } else {
    name // never Type 절대 실행되면 안된다는걸 나타냄
  }
}

 

'Today I Learned > TypeScript' 카테고리의 다른 글

[TypeScript] Nomad Coder - TypeScript 2주 챌린지(5일차)  (0) 2022.07.29
[TypeScript] Nomad Coder - TypeScript 2주 챌린지(4일차)  (0) 2022.07.28
[TypeScript] Nomad Coder - TypeScript 2주 챌린지(3일차)  (0) 2022.07.27
[TypeScript] Nomad Coder - TypeScript 2주 챌린지(1일차)  (0) 2022.07.25
[TypeScript] Nomad Coder - TypeScript 2주 챌린지  (0) 2022.07.25
    'Today I Learned/TypeScript' 카테고리의 다른 글
    • [TypeScript] Nomad Coder - TypeScript 2주 챌린지(4일차)
    • [TypeScript] Nomad Coder - TypeScript 2주 챌린지(3일차)
    • [TypeScript] Nomad Coder - TypeScript 2주 챌린지(1일차)
    • [TypeScript] Nomad Coder - TypeScript 2주 챌린지
    BaGyun
    BaGyun

    티스토리툴바