TypeScript / / 2024. 10. 25. 07:35

TypeScript 정리1

Node개발을 하면서 JavaScript로만 개발을 진행하다보면

null, undefined이 변수에 저장되어 있다거나

파라미터에 마우스를 가져다대면 any라고 되어있었는데 왜 이렇게 설정되어 있는지 몰랐습니다.

null은 무엇이고 언제 사용되는거고 undefined와 차이점은 무엇인지 또 타입스크립트를 배우면서

타입 계층도에 unknown라인에 있는 타입들은 무엇인지 궁금하여 다시 정리하고 공부해보았고

정리해놓은 글입니다.

1. unknown

  • unknown 타입은 TypeScript에서 사용할 수 있는 가장 제한적인 "알 수 없는" 타입입니다.
  • 정의: 어떤 값이 unknown 타입으로 정의되면, 이 값의 정확한 타입을 알 수 없다는 것을 의미합니다
  • 특징:
    • **any**와 비슷하지만, 안전성이 높습니다.
    • unknown 타입의 값을 사용할 때는 타입 확인(type-check)이 필요합니다. 즉, 해당 값을 다른 타입으로 사용하기 전에 반드시 어떤 타입인지 확인해야 합니다.
  • 사용 예시:
  • let value: unknown; value = "Hello"; value = 42; // 다음과 같이 타입을 확인하지 않고 사용하면 오류가 발생합니다. // console.log(value.toUpperCase()); // Error! // 올바르게 사용하기 위해서는 타입 확인이 필요합니다. if (typeof value === "string") { console.log(value.toUpperCase()); // 정상 출력: "HELLO" }
  • 적절한 사용 상황:
    • 외부에서 들어오는 데이터(예: API 응답)를 다룰 때, 처음에는 정확한 타입을 모를 경우 사용됩니다.
    • **unknown**을 통해 불확실한 타입을 다루고자 할 때 타입 검사를 강제할 수 있으므로 안전한 코딩이 가능합니다.

2. any

  • any 타입은 TypeScript에서 가장 유연하면서도 가장 위험한 타입입니다.
  • 정의: **any**는 "아무거나 될 수 있는" 타입을 의미합니다. 즉, 어떤 값이라도 할당할 수 있습니다.
  • 특징:
    • 모든 타입의 값을 할당할 수 있고, 이 값으로 아무런 제한 없이 연산을 수행할 수 있습니다.
    • **any**는 TypeScript의 타입 검사 기능을 사실상 무력화합니다.
    • 남용할 경우 버그를 유발할 가능성이 높아집니다.
  • 사용 예시:
  • let value: any; value = "Hello"; value = 42; console.log(value.toUpperCase()); // 런타임 오류가 발생할 수도 있지만 컴파일러는 체크하지 않음
  • 적절한 사용 상황:
    • **any**는 사용을 지양하는 것이 좋습니다. 그러나 타입 정보를 알 수 없는 라이브러리나 레거시 코드와의 호환을 위해 일시적으로 사용되기도 합니다.

3. void

  • void 타입은 함수에서 반환 값이 없는 경우를 나타냅니다.
  • 정의: **void**는 어떤 타입도 없다는 의미로 사용됩니다. 일반적으로 함수가 아무런 값을 반환하지 않을 때 그 함수의 반환 타입을 **void**로 설정합니다.
  • 특징:
    • **void**는 특정 상황에서 반환값을 없도록 강제하기 위해 사용됩니다.
  • 사용 예시:
    • 위 함수는 반환값이 없으므로 반환 타입이 **void**입니다.
  • function logMessage(message: string): void { console.log(message); }
  • 적절한 사용 상황:
    • 함수가 아무것도 반환하지 않을 때 이를 명시적으로 나타내기 위해 사용됩니다.

4. undefined

  • ***undefined***는 JavaScript의 원시 타입 중 하나로, 변수가 초기화되지 않은 상태를 나타냅니다.
  • 정의: **undefined**는 값이 할당되지 않은 변수의 기본값입니다.
  • 특징:
    • 일반적으로 변수를 선언했지만 값을 할당하지 않은 경우 해당 변수는 undefined 상태입니다.
    • 함수의 반환 타입이 **undefined**일 경우, 명시적으로 아무 값도 반환하지 않거나, 명시적으로 **return;**을 사용할 수 있습니다.
  • 사용 예시:
  • let value: undefined = undefined; function doNothing(): undefined { return undefined; }
  • 적절한 사용 상황:
    • **undefined**는 기본적으로 JavaScript 런타임에서 사용되며, 타입스크립트에서는 명시적으로 undefined 값을 사용하는 것을 지양합니다. 대신 타입 검사 등을 통해 예상치 못한 undefined 값을 방지하는 것이 좋습니다.

5. never

  • never 타입은 절대 도달할 수 없는 상태를 나타냅니다.
  • 정의never 타입은 절대로 발생하지 않는 값을 의미합니다. 예를 들어, 함수가 절대 반환하지 않거나무조건 오류를 던지는 경우 그 함수의 반환 타입은 **never**입니다.
  • 특징:
    • never 타입은 값을 반환할 수 없기 때문에, 종료되지 않는 함수나 항상 오류를 발생시키는 함수에서 사용됩니다.
    • 예를 들어, 무한 루프에 빠지거나 오류가 발생할 때 사용됩니다.
  • 사용 예시:
  • function throwError(message: string): never { throw new Error(message); } function infiniteLoop(): never { while (true) { // 무한 반복 } }
  • 적절한 사용 상황:
    • **never**는 주로 함수가 오류를 발생시키거나 영원히 종료되지 않는 경우 사용합니다.
    • 예를 들어, 타입 가드로 모든 가능한 경우를 처리한 후에도 예외적인 상황이 발생했을 때 이를 방지하기 위해 사용됩니다.

요약

타입 설명 사용 예시

unknown 타입이 불명확한 상태, 안전한 타입 체크가 필요함 외부 입력 데이터
any 모든 타입을 허용하며 타입 검사 비활성화 호환성 필요 시
void 반환 값이 없는 함수의 타입 로그 함수 등
undefined 값이 할당되지 않은 상태, 초기화되지 않은 변수에 사용 초기값 없는 변수
never 절대 발생하지 않는 상황 (오류 또는 무한 루프 등) 오류 발생 함수

이렇게 각 타입은 특정 상황에 적합한 용도로 사용되며, 코드의 안전성과 명확성을 높이기 위해 적절한 타입을 선택하는 것이 중요합니다. TypeScript를 사용할 때는 **any**를 최대한 피하고, unknownvoidundefinednever 등을 상황에 맞게 활용하는 것이 좋은 코드 품질을 유지하는 방법입니다.

'TypeScript' 카테고리의 다른 글

TypeScript 인터페이스  (0) 2024.10.29
TypeScript 정리3 (함수와 타입)  (0) 2024.10.25
TypeScript 정리2 (이해하기)  (3) 2024.10.25
TypeScript 기본  (3) 2024.10.25
TypeScript 개론  (0) 2024.10.25
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유