TypeScript

[TypeScript]Type Assertion , Type Casting

hans-j 2024. 8. 4. 17:30

Type Assertion 이 뭐냐 : 타입스크립트에서만 사용하는 개념으로  타입을 확인하거나 강요할 때 사용, 사용을 피하는 것이 좋음. 

쉽게 말해서 컴파일러에게 "이 변수는 이 타입이야"라고 알려주는 방법


 

Type Assertion  왜 하냐 : TypeScript 가 알 수 없는 타입을 사용할 경우, 타입을 선언하지않으면 에러가 난다.

이런 상황에서 Type Assertion (타입 단언)을 해준다.

 

에러 상황 예시

const myCanvas = document.getElementById("main_canvas");

 


 

Type Assertion  어떻게 하냐

 

  • as 문법
  • 꺾쇠 괄호(< >) 문법

 


 

Type Assertion 예시 :

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
// 또는
let strLength: number = (<string>someValue).length;

 

이 예제에서 someValue는 any 타입이지만, 우리가 알고 있기로는 문자열이다.

그래서 타입 단언을 사용해서 컴파일러에게

 

 

컴파일러야 여기 와서 앉아보렴

"이 값은 문자열이야"라고 알려줌.

 

 

 

이중으로도 사용 할 수 있다.

 

예를 들어서 

const x = "hello" as number;

 

강제변환이 허용되지 않기때문에 위의 경우에는 에러가 발생한다. 이런 경우에

const a = (expr as any) as T;

 

위처럼 any 또는 이후에 소개 할 unknown으로 변환한 뒤 , 원하는 타입으로 변경하면 됨.


Type Casting 이 뭐냐 :

주로 다른 프로그래밍 언어들(예: C++, Java)에서 사용하는 개념으로, 변수의 실제 타입을 다른 타입으로 변환하는 과정을 의미함.

이 과정은 주로 런타임에 이루어지며, 메모리 상에서 데이터의 표현을 실제로 변경할 수 있음.

📢📢 Type Assertion은 컴파일 시에만 영향을 미치고, 런타임에는 아무런 영향을 미치지 않음.


 

Type Casting 왜 하냐 : 변수의 실제 타입을 변환. 데이터의 메모리 표현을 변경하기 위함

 


 

Type Casting  어떻게 하냐 : 타입스크립트에서는 타입 캐스팅이라는 용어 대신 Type assertion 이라는 용어를 사용한다.

따라서 타입스크립트에서 직접적인 Type casting은 없음.

런타임에 실제로 타입을 변경하지 않지만, 타입 단언과 변환 함수를 통해 유사한 효과를 얻을 수 있다.


 

Type Casting 예시 :

function toNumber(value: any): number {
  return Number(value);
}

let stringValue: any = "123";
let numberValue: number = toNumber(stringValue);
console.log(numberValue); // 출력: 123

 


 

 

결론이 뭐냐 : 쓰는것을 최소화하되 써야하되 써야한다면 잘 알고 써라.

 

사용을 기피하는 이유는 타입 단언은 컴파일러에게 특정 타입으로 간주하도록 강제하는 방법이기 때문에, 실제 값의 타입과 일치하지 않을 경우 런타임 오류를 발생시킬 수 있음

 

대안으로는

 

1. 타입 추론

2. 타입 가드 사용

3. 인터페이스와 타입 선언

 


출처 

 

https://www.typescriptlang.org/ko/docs/handbook/2/everyday-types.html#type-assertions

 

Documentation - Everyday Types

언어의 원시 타입들.

www.typescriptlang.org

 


 

함께 참고하면 좋은 글

 

https://radlohead.gitbook.io/typescript-deep-dive/type-system/type-assertion

 

타입 표명(Type Assertion) | TypeScript Deep Dive

TypeScript에서는 시스템이 추론 및 분석한 타입 내용을 우리가 원하는 대로 얼마든지 바꿀 수 있습니다. 이때 "타입 표명(type assertion)"이라 불리는 메커니즘이 사용됩니다. TypeScript의 타입 표명은

radlohead.gitbook.io