TypeScript

unknown과 any 차이점 알아보기

citron031 2023. 8. 19. 20:17

unknown과 any 모두 유연하게 타입을 설정하기 위해서 사용된다.

🌧️ 다만, 타입 에러를 잡아내기 어렵기에 권장되지는 않는다.

 

다만, 이 둘의 차이점으로는 any가 더 유연하고 안전성이 낮은 반면, unknown은 타입 안정성을 유지하면서 유연함을 제공한다.

 

unknown vs any 예제

// unknown 타입
let value1: unknown;
value1 = 123; // 할당 가능
value1 = 'Hello'; // 할당 가능

// any 타입
let value2: any;
value2 = 123; // 할당 가능
value2 = 'Hello'; // 할당 가능

기본적으로는 any와 unknown모두 다양한 타입을 할당할 수 있게 해준다.

// unknown과 any의 차이
let num1: number = value1; // Error: 'unknown' 타입은 'number' 타입에 할당할 수 없음
let num2: number = value2; // any 타입은 모든 타입에 할당 가능

// unknown의 안전한 타입 변환
if (typeof value1 === 'number') {
    let num3: number = value1; // 가능: 값의 타입 체크 후 할당
}

// any는 모든 타입을 허용하여 타입 체크 없이도 할당이 가능
let str: string = value2; // 가능: any 타입은 모든 타입으로 할당 가능

하지만, any타입이 다른 타입의 변수에 할당될 수 있는 반면, unknown은 다른 타입의 변수에 할당될 수 없다.

unknown을 다른 타입의 변수에 할당하고자 한다면, 타입을 체크하는 과정이 꼭 필요하다.

 

function func1(a: any) {
  a.b(); // OK
}
function func2(a: unknown) {
  a.b(); // Error
}

또한, any는 property 접근에 제한이 없지만, unknown의 property는 접근에 제약이 있다.

 

🐝 참고 자료

https://www.typescriptlang.org/docs/handbook/2/functions.html#unknown

 

Documentation - More on Functions

Learn about how Functions work in TypeScript.

www.typescriptlang.org