불리언 (Boolean)

let isDone: boolean = false;

숫자 (Number)

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

모든 숫자는 부동 소수 값이다. 부동 소수에는 number라는 타입을 사용한다. 또한 number 타입은 2진수, 8진수 10진수 16진수도 지원한다.


문자열 (String)

let color: string = "blue";
color = 'red';

텍스트 데이터 타입을 string으로 표현한다.


배열 (Array)

let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];

배열 타입은 두 가지 방법으로 쓸 수 있다. 배열 요소들을 나타내는 타입 뒤에 []를 쓰는 방법과 제네릭 배열 (Array<elemType>) 방법이 있다.


튜플 (Tuple)

// 튜플 타입으로 선언
let x: [string, number];
// 초기화
x = ["hello", 10]; // 성공
// 잘못된 초기화
x = [10, "hello"]; // 오류

let y: [string, number, boolean];
y = ['hello', 10, true];

튜플 타입을 사용하면, 요소의 타입과 개수가 고정된 배열을 표현할 수 있다. 요소들의 타입이 모두 같을 필요는 없다.

튜플의 활용으로는 리액트의 useState 를 생각하면 된다. 실제 react에서 useState의 정의부를 확인해보면 아래와 같이 반환값이 튜플 형태이다.

function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];

열거 (Enum)

enum Avengers {
  Capt, // 0
  IronMan, // 1
  Thor, // 2
}

console.log(Avengers[0]); // 'Capt'
console.log(Avengers.Capt); // 0

enum Color {
  RED = 'red',
  GREEN = 'green',
  BLUE = 'blue',
}

const color = Color.BLUE;
console.log(color); // 'blue'

일반적으로 Enum은 첫글자만 대문자로 작성한다.

enum은 값의 집합에 더 나은 이름을 붙여줄 수 있다. 자료형 집합과 사용하면 도움이 될만한 데이터 형이다.

enum0부터 시작하여 멤버들의 번호를 매긴다. 값을 지정할 수 도 있다.

다른 언어에서는 enum은 유용하지만 타입스크립트에서 enum은 위험성이 존재한다. enum은 타입을 정확하게 보장하지 않기 때문이다.

아래 예시 코드를 보자.

enum Days {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday,
}

let day: Days = Days.Saturday;
day = Days.Tuesday;
day = 10; // 여기 문제점!!
console.log(day);
// 출력
// 10

위 코드를 보면 Days 라는 enum 타입으로 명시된 변수 day에 숫자를 할당할 수 있는 문제점이 있다.

이러한 이유때문에 enum을 사용하기 보다 union 타입으로 대체하여 사용하는게 좋다.

type DaysOfWeek = 'Monday' | 'Tuesday' | 'Wednesday' | 'Thursday' | 'Friday' | 'Saturday' | 'Sunday';

let dayOfweek: DaysOfWeek = 'Monday';
dayOfweek = 'Wednesday';
dayOfweek = 10; // 타입 에러!

Any 🙅🏻‍♂️

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;

let list: any[] = [1, true, "free"];
list[1] = 100;

알지 못하는 타입을 표현해야 할 때 사용한다. 어떠한 타입이 들어와도 상관없다.

타입의 일부만 알고 전체는 알지 못할 때 사용할 수 도 있다. 하지만 되도록 타입을 명시할 수 있다면 명시해주는게 좋기 때문에 사용을 재고하자.


Void

function print(): void {
  console.log('hello');
}

let unusable: void = undefined; // 변수 선언에는 void를 사용하지 말자.

void는 어떤 타입도 존재할 수 없음을 나타낸다. 보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰인다.


Null and Undefined

let u: undefined = undefined;
let n: null = null;

Never

// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message: string): never {
    throw new Error(message);
}

// 반환 타입이 never로 추론된다.
function fail() {
    return error("Something failed");
}

// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function infiniteLoop(): never {
    while (true) {
    }
}

let neverEnding: never; // 변수 선언에는 never를 사용하지 말자.

never 타입은 절대 발생할 수 없는 타입을 의미한다. 예를들어 함수 내에서 무한 반복문이 동작하거나 에러가 발생될 때를 표현한다.

never 타입은 any 와 자기자 자신인 never 에 할당 할 수 없다.


Unknown 🙅🏻‍♂️

 let notSure: unknown = 0;
  notSure = 'he';
  notSure = true;

타입을 알 수 없다는 의미의 타입이다. 하지만 되도록 타입을 명시할 수 있다면 명시해주는게 좋기 때문에 사용을 재고하자.


객체 (Object) 🙅🏻‍♂️

declare function create(o: object): void;

create({ prop: 0 }); // 성공
create([]); // 성공

create(42); // 오류
create("string"); // 오류
create(false); // 오류
create(undefined); // 오류

object는 원시 타입이 아닌 타입을 나타낸다. (number, string, boolean, bigint, symbol, null, 또는 undefined 가 아닌 나머지를 의미한다.)

왠만한 경우에는 객체의 타입을 명시할 수 있기 때문에 되도로깅면 명시해주는게 좋다.


타입 단언 (Type assertions)

타입 단언(Type assertions) 은 컴파일러에게 "날 믿어, 난 내가 뭘 하고 있는지 알아"라고 말해주는 방법이다. (가끔 TypeScript보다 개발자가 값에 대해 더 잘 알고 일을 때가 있기 때문이다.)

타입 단언은 다른 언어의 타입 변환(형 변환)과 유사하지만, 다른 특별한 검사를 하거나 데이터를 재구성하지는 않는다.

타입 단언에는 아래와 같이 두 가지 형태가 있습니다.

  • "angle-bracket" 문법
  • as-문법

"angle-bracket" 문법

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;

변수 앞에 제네릭형태로 타입을 지정하여 해당 변수의 타입이 이거야! 라고 지정한다.


as-문법

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;
profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글