배열 (Array)

배열은 두가지 방법으로 쓸 수 있습니다.

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

튜플 (Tuple)

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

<aside> 💡 가변적인 배열은 튜플이 아닌가 보다!

</aside>

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

Any

Object 가 any와 비슷한 역할을 할 수 있을 것 같다고 생각할 수도 있습니다. 그런데 어떤 값이든 할당할 수 있게 해주지만 실제로 메소드가 존재하더라도, 호출할 수 없는 경우가 있습니다.

let notSure: any = 4;
notSure.ifItExists(); // 성공, ifItExists 는 런타임엔 존재할 것입니다.
notSure.toFixed(); // 성공, toFixed는 존재합니다. (하지만 컴파일러는 검사하지 않음)

let prettySure: Object = 4;
prettySure.toFixed(); // 오류: 프로퍼티 'toFixed'는 'Object'에 존재하지 않습니다.

Object를 no-primitive object 대신에 사용하지 마세요.

Never

never 타입은 절대 발생할 수 없는 타입을 나타냅니다.

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

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

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

객체 (object)

object는 원시 타입이 아닌 타입을 나타냅니다. 예를 들어 number, string, boolean, bigint, sybol, null, undefined 가 아닌 나머지를 의미 합니다.