본문 바로가기
개발 프레임워크/NestJS

[NestJS] Typescript(타입스크립트)

by minhyeok.lee 2023. 2. 5.
반응형

NestJS에서 Typescript의 사용


변수 선언

타입스크립트에서 변수를 선언하는 방식은 다음과 같다.

[선언키워드] [변수명]: [타입]

 

선언키워드: const, let 또는 var로 선언한다.

const는 선언 후 재할당이 불가능하며 let과 var는 재할당이 가능하여 값을 바꿀 수 있다.

2023.02.04 - [언어/Javascript] - [js] const, let

 

[js] const, let

javascript의 변수 선언 ( const vs let ) javascript에서 변수를 선언하는 방법은 3가지 var, let, const가 있다. 하지만 변수 선언 방식 중 하나인 var는 사용을 지양하기 때문에 아래 코드 블록에는 let으로만

kfdd6630.tistory.com

 

let과 var의 차이는 hoisting 여부인데, var는 변수를 사용한 후에 선언이 가능하지만 let은 그렇지 못한다.

2023.02.04 - [언어/Javascript] - [js] var, let

 

[js] var, let

javascript의 변수 선언 ( var vs let ) javascript에서 변수를 선언하는 방법은 3가지 var, let, const가 있다. var로 선언한 변수는 let으로 선언한 변수와 유사, 대부분의 경우에 let을 var로, var를 let으로 바꿔

kfdd6630.tistory.com

 

Typescript에서 지원하는 타입

타입스크립트는 자바스크립트가 가지고 있는 자료형을 모두 포함한다.

자바스크립트의 타입은 기본타입(Primitive value)과 객체형(Object), 함수형(Function)이 있다.

typeof 키워드를 이용하여 인스턴스의 타입을 알 수 있다.

 

 

기본 타입

typeof 설명 할당 가능한 값
boolean 참, 거짓을 나타내는 논리값 true, false
null "유효하지 않음"을 나타낸다 null
undefined 값이 존재하지 않음. 즉, 변수 선언 후 "값이 할당되지 않음"을 나타낸다 undefined
number 배정밀도 64비트 형식 IEEE 754의 값 -(2^53 -1) 와 2^53 -1 사이의 정수와 실수
Infinity, Infinity
NaN (Not a Number) 
bigint Number의 범위를 넘어서는 정수를 안전하게 저장하고 연산할 수 있게 해 준다 const x = 2n ** 53n;
정수 끝에 n을 추가한다
string 문자열. 변경 불가능(immutable)하다. 홑따옴표 또는 쌍따옴표로 둘러싸인 문자열
'hello', "world"
symbol 유일하고 변경 불가능한 (immutable) 기본값(primitive value) 객체 속성의 키로 사용할 수 있다

 

객체 타입

객체 타입은 속성(Property, 프로퍼티)를 가지고 있는 데이터 컬렉션이다.

C언어의 구조체와 유사하다.

속성은 키와 값으로 표현되는데 값은 다시 자바스크립트의 타입을 가지고 있다. 따라서 다음 예와 같이 데이터를 구조적으로 표현할 수 있다.

  const userA = {
    name: '홍길동',
    level: 1,
    skill: ['Sheild', 'powerAttak'],
  }

 

자바스크립트에는 개발할 때 유용한 내장객체들이 있다.

  • Date: 1970년 1월 1일 UTC 자정과의 시간 차이를 밀리초 단위로 나타낸 것으로 시간을 다룰 때 사용한다.
  • 배열(Array): 정수를 키로 가지는 일련의 값을 가진 객체이다. 코드로 표현할 때는 다른 언어에서와 같이 대괄호([])로 표현한다.
  • 키를 가진 컬렉션: Map, WeakMap은 키와 값을 가지는 객체 타입이고, Set과 WeakSet은 유일값들로 이루어진 컬렉션 객체 타입이다.
  • JSON: JSON(JavaScript Object Notation)은 자바스크립트에서 파생된 경량 데이터 교환 형식이지만 많은 프로그래밍 언어에서 사용된다. JSON은 범용 데이터 구조를 구축한다.
  • 이 외 표준 라이브러리에는 더 많은 내장 객체가 있다. 이를 확인하고 싶다면 MDN 문서를를 확인해보자.

 

함수(Fuction) 타입

자바스크립트는 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있다.

함수의 결과로 반환할 수도 있다. 언어의 이러한 특징을 일급 함수라고 한다.

함수 func의 타입을 검사하면 "function"이 된다.

typeof func === "function"

 

 

any / unknown / never

타입스크립트의 특수한 타입 any와 unknown, never이 있다.

any: js 와 같이 어떤 타입의 변수에도 할당이 가능하다. 이 특성때문에 런타임에 오류를 일으킬 가능성이 있다.

unknown: any 타입과 마찬가지로 어떤 타입도 할당 가능하지만 다른 변수에 할당 또는 사용할 때 타입을 강제하도록 하여 any가 일으키는 오류를 줄여준다.

never: never 타입의 변수에는 어떤 값도 할당할 수 없다. 함수의 리턴 타입으로 지정하면 함수가 어떤 값도 반환하지 않는다는 것을 뜻한다.

 

다음과 같이 특정 타입의 값을 할당받지 못하도록 하는데 사용할 수도 있다. 이는 제네릭 타입이라고 한다.

type NonString<T> = T extends string ? never : T;

 

타입 정의하기

타입 스크립트는 타입을 정의해서 사용할 수 있다.

기본타입과 같은 타입을 정의한다는 뜻은 아니고, 위에서 설명한 타입들을 조합하여 타입에 이름을 붙여 사용한다.

다음 코드를 vscode같은 컴파일러에 입력하고 마우스를 user 변수 위로 가져가 보자.

const user = {
  name: '홍길동',
  level: 1,
}

 

추론된 타입이 다음과 같이 표시된다.

const user: {
  name: string;
  level: number;
}

 

변수에 객체를 바로 할당하지 않고 interface로 정의할 수 있다.

interface User{
  name: string;
  level: number;
}

const user: User = {
  name: '홍길동',
  level: 1,
}

 

interface는 class로 선언할 수도 있다.

class User{
  constructor(name: string, level: number){ }
}

const user: User = new User('홍길동', 1);

 

생성자에 선언된 변수는 클래스 멤버변수가 다.

접근제한자(public, private)가 없으면 public 변수가 된다.

멤버변수를 사용할 때는 this.name과 같이 this 키워드와 함께 사용한다.

 

또 타입은 type 키워드로 새로운 타입을 만들 수 있다.

type UserOne = User;

MyUser 타입은 기존 User 타입을 그대로 사용하지만 내가 사용하는 도메인에 맞는 이름으로 바꾼 것이다.

 

TypeScript(타입스크립트)는 타입을 잘 다룰수록 그 진가를 발휘하는 언어이다.

  • 정적분석(Static Analysis). 소스 코드를 실행하지 않고 코드만을 분석하여 문제가 될 부분을 찾아내는 기법
  • 덕 타이핑(duck typing)은 객체의 변수 및 메서드의 집합이 객체의 타입을 결정하는 것
반응형

댓글