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
함께 참고하면 좋은 글
https://radlohead.gitbook.io/typescript-deep-dive/type-system/type-assertion
'TypeScript' 카테고리의 다른 글
[TypeScript]Interface VS Type 간단 비교 (0) | 2024.07.30 |
---|---|
[TypeScript]JS react -> TS react 리팩토링 (0) | 2023.10.25 |
[TypeScript]JS -> TS 리팩토링하며 겪은 오류 (0) | 2023.10.24 |
[TypeScript]TS쓰는 법 간단설명 (1) | 2023.04.17 |
[TypeScript]변수에 타입 담기, readonly (9) | 2023.04.16 |