기본 타입

Boolean Number String Object Array Tuple
Enum Any Void Null Undefined Never

 

let str: string = 'hi';
let num: number = 5;
let isBool: boolean = false;

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

let tup: [string, number] = ['a',1]; // tuple: 배열의 길이는 고정, 각 요소의 타입이 지정되어 있는 배열

let every: any = "hi";

let printSomething = (a: number, b: number): void => {
    console.log(a+b);
};

 

Enum

TypeScript 열거형은 상수 값의 그룹입니다. 기본적으로 0부터 시작합니다.

enum Color {Red = 1, Green, Blue}

let c: Color = Color.Green;
console.log(c); // 2

let d: string = Color[0];
let e: string = Color[2];
console.log(d); // undefined
console.log(e); // "Green"

 

Never 

타입스크립트에서 never 타입은 값의 공집합이다. 집합에 어떤 값도 없기 때문에, never 타입은 any 타입의 값을 포함해 어떤 값도 가질 수 없다. 그래서 never 타입은 때때로 점유할 수 없는 또는 바닥 타입이라고 불린다.

숫자 체계에 아무것도 없는 양을 나타내는 0처럼 문자 체계에도 불가능을 나타내는 타입이 필요하다. 

  • 절대 발생할 수 없는 타입을 나타냄
  • 종료되지 않는 함수
  • 함수의 끝에 절대 도달하지 않는다는 의미
  • never는 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 쓰인다.
  • 변수 또한 타입 가드에 의해 아무 타입도 얻지 못하게 좁혀지면 never 타입을 얻게 될 수 있다.
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message: string): never {
    throw new Error(message);
}
 
// 반환 타입이 never로 추론된다.
function fail() {
    return error("Something failed");
}
 
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
// break를 사용하면 error 발생
function infiniteLoop(): never {
    while (true) {
    }
}

 

null , undefined

// 이 밖에 이 변수들에 할당할 수 있는 값이 없습니다!
let u: undefined = undefined;
let n: null = null;

 

연산자를 이용한 타입 정의

  • Union Type

유니온 타입(Union Type)이란 자바스크립트의 OR 연산자(||)와 같이 A이거나 B이다 라는 의미의 타입입니다.

* 타입스크립트 관점에서는 introduce() 함수를 호출하는 시점에 Person 타입이 올지 Developer 타입이 올지 알 수가 없기 때문에 어느 타입이 들어오든 간에 오류가 안 나는 방향으로 타입을 추론하게 됩니다. 기본적으로는 Person Developer 두 타입에 공통적으로 들어있는 속성인 name만 접근할 수 있게 됩니다.

// any를 사용하는 경우
function getAge1(age: any) {
    age.toFixed(); // 에러 발생, age의 타입이 any로 추론되기 때문에 숫자 관련된 API를 작성할 때 코드가 자동 완성되지 않는다.
    return age;
  }
 
// 유니온 타입을 사용하는 경우
function getAge2(age: number | string) {
    if (typeof age === 'number') {
        age.toFixed(); // 정상 동작, age의 타입이 `number`로 추론되기 때문에 숫자 관련된 API를 쉽게 자동완성 할 수 있다.
        return age;
    }
    if (typeof age === 'string') {
        return age;
    }
    return new TypeError('age must be number or string');
}
// 주의
interface Person {
    name: string;
    age: number;
  }
interface Developer {
    name: string;
    skill: string;
}
function introduce(someone: Person | Developer) {
    someone.name; // O 정상 동작
    someone.age; // X 타입 오류
    someone.skill; // X 타입 오류
}
  • Intersection Type

여러 타입을 모두 만족하는 하나의 타입을 의미합니다. 

interface Person {
    name: string;
    age: number;
  }
interface Developer {
    name: string;
    skill: number;
}
type Capt = Person & Developer;

/* Capt
{
    name: string;
    age: number;
    skill: string;
}*/

 

 

출처

https://lakelouise.tistory.com/178

https://joshua1988.github.io/ts/guide/basic-types.html#void

https://ui.toast.com/posts/ko_20220323

'개발 > Javascript(Typescript)' 카테고리의 다른 글

[디자인 패턴] 싱글톤  (0) 2023.08.08
타입스크립트 4 - 클래스  (0) 2023.07.21
타입스크립트 3 - 인터페이스  (0) 2023.07.20
타입스크립트 2 - 함수  (0) 2023.07.17
자바스크립트 this  (0) 2023.07.14

+ Recent posts