Develope/기타

Typescirpt any, unknown, never 정리

oper0116 2024. 8. 16. 10:33
반응형

any

any 타입으로 선언되었을 경우에는 어떠한 타입의 될 수 있는 타입을 의미한다. any를 사용하면 TypeScript의 타입 체크를 우회할 수 있기에 해당 변수에 어떠한 타입의 값이든 할당할 수 있다. 이로 인하여 타입 안정성이 없어지므로, 런타임 오류가 발생할 가능성이 높아진다.

let something: any;

something = 123; // 숫자 할당 가능
something = "hello"; // 문자열 할당 가능
something = true; // 불리언 할당 가능

something.someMethod(); // 타입 오류 없음, 하지만 런타임에 오류가 발생할 수 있음

unknown

unknown 타입은 any와 마찬가지로 어떤 타입의 값이든 담을 수 있지만, 그 값을 사용하기 전에 타입 검사를 수행하여야 한다. 이를 통해 무분별한 타입 사용을 방지하고, 코드의 안정성을 높일 수 있다.

let value: unknown;

value = 123;
value = "hello";

// value.trim(); // 오류: 'trim'은 'unknown' 타입에 대해 사용할 수 없습니다.

if (typeof value === "string") {
    value.trim(); // 문자열로 타입이 확인된 후에는 안전하게 사용 가능
}

never

never 타입은 절대 발생할 수 없는 값을 의미한다. 즉, 함수가 정상적으로 끝나지 않거나, 예외를 발생시키는 경우, 또는 조건문에서 절대 도달할 수 없는 코드에 대해 사용한다.

function error(message: string): never {
    throw new Error(message); // 이 함수는 절대 값을 반환하지 않음
}

function fail(): never {
    return error("Something failed");
}

function checkType(x: string | number): boolean {
    if (typeof x === "string") {
        return true;
    } else if (typeof x === "number") {
        return false;
    } else {
        const neverValue: never = x; // 여기서 'x'는 'never' 타입이어야 함
        return neverValue;
    }
}
반응형