코드/Typescript

[Typescript] unknown은 any 의 counterpart

Yeah-Panda 2025. 2. 3. 16:14

1. any와 unknown의 기본적인 차이

특성 any unknown
제한 아무런 제한 없음 모든 작업이 제한됨
타입 검사 런타임시 타입 오류를 방지하지 않음 컴파일시 타입 확인이 필요함
유연성 매우 유연함(모든 타입에 할당 가능) 안전함(할당은 가능하지만 사용은 제한됨)

 

2. any

  • any는 “아무거나 될 수 있음”을 의미하며, 모든 작업이 허용됩니다.
  • 안전성이 낮음: 타입스크립트가 타입 검사를 포기하므로, 런타임 오류가 발생할 가능성이 높습니다.
let value: any = "Hello";
value.foo(); // 런타임 오류 발생 가능하지만 컴파일러가 경고하지 않음

 

3. unknown

  • unknown은 “아직 타입을 알 수 없음”을 의미하며, 특정 타입으로 명확히 확인되기 전까지 사용이 제한됩니다.
  • 안전성이 높음: 값을 사용하려면 타입을 좁히거나(type narrowing) 타입 단언(type assertion)을 해야 합니다.
let value: unknown = "Hello";
value.foo(); // 컴파일 오류: 'foo' 속성을 사용할 수 없음

if (typeof value === "string") {
  console.log(value.toUpperCase()); // 타입이 좁혀진 후에는 안전하게 사용 가능
}

 

4. any와 unknown의 관계

 

공통점:

둘 다 모든 타입의 값을 할당받을 수 있습니다.

let value1: any = 42;
let value2: unknown = 42; // 모두 허용

차이점:

  • any는 아무 작업이나 허용: 어떤 속성 접근이나 연산도 제한이 없습니다.
  • unknown은 제한적: 값을 사용하려면 반드시 타입 확인을 거쳐야 합니다.

5. 왜 unknown이 any의 counterpart인가?

  • any는 타입 검사와 안전성을 포기한 “최대 유연성”을 제공합니다.
  • 반대로, unknown은 타입 안정성을 유지하기 위해 유연성을 제한합니다.
  • 두 타입 모두 “모든 타입의 값을 받을 수 있다”는 공통점을 가지지만, 사용 방식과 안전성에서 대조적입니다.

6. 실제 사용 시 예

  • any: 빠르게 개발하거나 타입 검사에 신경 쓰지 않을 때 사용하지만, 권장되지 않습니다.
  • unknown: 타입을 미리 알 수 없지만, 이후 타입 확인을 통해 안전하게 사용하고자 할 때 적합합니다.

요약하자면, unknownany와 대조적으로 타입 안정성을 유지하기 위한 타입스크립트의 도구입니다. “counterpart”라는 표현은 이 대조적인 특성을 나타냅니다. 😊

'코드 > Typescript' 카테고리의 다른 글

(Typescript) as unknown as typeof data  (0) 2025.01.23