타입단언

boyeonJ·2023년 8월 22일
0

TypeScript

목록 보기
9/12
post-thumbnail

타입탄언이란

개발자가 컴파일러에게 "이 변수는 이 타입이다"라고 명시적으로 알려주는 기능을 말합니다. 보통 타입스크립트는 타입 추론을 통해 타입을 결정합니다. 타입 추론을 활용하는 편이 안정성이 좋지만 타입 단언을 사용할 수 밖에 없는 상황에서는 타입 단언을 사용합니다.

📌 타입단언 장점

타입 단언을 사용하면 유연성을 높일 수 있고 좀 더 쉽게 타입스크립트를 사용할 수 있습니다. 또는 외부라이브러리와 같이 내가 타입을 직접 변경할 수 없는 경우 사용하면 에러를 해결해줄수 있다는 장점이 있습니다.

📌 타입단언 단점

그렇지만 타입 단언을 활용하게 되면 컴파일러가 타입검사를 하지 않기 때문에 런타임 에러가 발생할 수 있습니다. 이로 인하여 타입 안정성이 저하될 수 있습니다.

따라서 타입 단언은 반드시 필요한 경우에만 사용해야 하며, 타입 단언 대신에 타입 가드나 제네릭을 활용하여 타입 안정성을 유지하면서 코드를 작성하는 것이 권장되는 방법입니다.


타입단언 문법

1. Angle-Bracket

let variable1: any = "hello";
let length1: number = (<string>variable1).length;

2. As 구문

let variable2: any = "world";
let length2: number = (variable2 as string).length;

3. ! 연산자 (non-null assertion operator)

반드시 값이 존재한다는것을 의마하는 연산자입니다. 해당 연산자를 활용하면 컴파일시점에는 에러가 발생하지 않을 수 있지만, 실제 런타임 시점에는 에러가 발생할 수 있는 가능성이 있습니다.

function getStringLength(str: string | null): number {
    return str.length; // 에러 발생! str이 null일 수 있음
}

function getStringLengthWithAssertion(str: string | null): number {
    return str!.length; // '!' 연산자를 사용하여 null 아님을 보장
}

주의할점

타입단언은 원시값 뿐만 아니라 함수/변수 호출 결과에도 사용 가능

// 타입단언은 원시값에 사용 가능
const value: any = "Hello, TypeScript!";
const stringValue: string = value as string;

// 타입단언은 함수/변수 호출 결과에도 사용 가능
function calculateLength(input: string): number {
  return input.length;
}
const result: number = calculateLength("Hello") as number;

중첩 사용 가능

// 중첩된 타입단언도 가능
const nestedValue: any = 123;
const nestedString: string = ((nestedValue as number).toString()) as string;

호환되지 않은 데이터 타입단언 불가

// 호환되지 않은 데이터 타입단언은 불가
const incompatibleValue: any = "Hello";
// const incompatibleNumber: number = incompatibleValue as number; // 오류 발생

변수의 이름에 사용 불가

// const as: string = "Hello"; // 'as'는 예약어라 사용할 수 없음

0개의 댓글