Jint 2024. 10. 28. 22:33

한 입 크기로 잘라먹는 타입스크립트 - 타입 단언

1. 타입 단언
변수에 초기화한 값 뒤에 as 키워드를 명시하고 타입을 쓰면, 타입스크립트 컴파일러에게 as 앞의 값을 명시한 타입으로 간주하라고 알린다.
즉, 타입스크립트 컴파일러의 눈을 잠시 가리는 역할.

- src/chapter6.ts

// 타입 단언 (type assertion)
// 예제1
type Person = {
    name: string;
    age: number;
};

let person = {} as Person;
person.name = '송진성';
person.age = 27;

// 예제2
type Dog = {
    name: string;
    color: string;
};

let dog: Dog = {
    name: '돌돌이'
  , color: 'brown'
  , breed: '진도'
} as Dog;

// type 을 명시하지 않아도 단언이 된다.
let dog2 = {
    name: '돌돌이'
  , color: 'brown'
  , breed: '진도'
} as Dog;


1) 타입 단언의 규칙
값 as 단언 <- 단언식
A as B 라고 할 때 A가 B의 슈퍼타입이거나, A가 B의 서브타입이어야 한다.

- src/chapter6.ts

...
/**
 * 타입 단언의 규칙
 */
let num1 = 10 as never; // A는 number, B는 never 타입인 모든 타입의 서브타입이므로, 타입 단언이 이루어진다. (A는 B의 슈퍼타입)
let num2 = 10 as unknown; // A는 number, B는 unknown 타입인 모든 타입의 슈퍼타입이므로(전체집합 타입), 타입 단언이 이루어진다. (A는 B의 서브타입)
// let num3 = 10 as string; // A는 number, B는 string 타입으로 겹치는 값이 없는 교집합이 없는 타입(서로소 집합). 충분히 겹치치 않음 - 단언이 이루어지지 않는다.
let num3 = 10 as unknown as string; // 다중단언을 하면, 단언이 안되는 타입으로도 단언 가능. 좋은 방법은 아니다.
...


2) const 단언
변수 선언시 const 로 선언한 것과 동일한 효과를 보도록 만들어주는 단언.
객체 타입과 함께 사용할 때 활용도가 있다.

- src/chapter6.ts

...
/**
 * const 단언
 */
let num4 = 10 as const; // number literal type
// 읽기 전용 프로퍼티가 된 객체로 추론됨 (readonly 프로퍼티로 만들어서 편리하게 사용 가능)
let cat = {
    name: '야옹이'
  , color: 'yellow' 
} as const;
// cat.name = ''; // 프로퍼티의 값을 수정할 수 없는 객체가 됨
...


3) Non Null 단언
어떤 값이 null 이거나 undefined 이 아니라고 타입스크립트 컴파일러에게 알려주는 역할.

- src/chapter6.ts

...
/**
 * Non Null 단언
 */
type Post = {
    title: string;
    author?: string; // 선택적 프로퍼티 : 있어도 되고 없어도 됨
};

let post: Post = {
    title: '게시글1'
  , author: '이정환'
};

// ? 키워드 : 자바스크립트가 제공하는 옵셔널 체이닝
// 옵셔널 체이닝 : post.author 에 값이 null 또는 undefined 일 경우 오류가 발생하니, ?를 붙여 author 프로퍼티가 없으면 post.author?.length 값 전체가 undefined 으로 만들어 준다.
// const len: number = post.author?.length;
const len: number = post.author!.length; // ! 키워드 : non null 단언 - 해당 프로퍼티 값이 null 이거나 undefined 이 아닐 것이라고 타입스크립트 컴파일러가 믿도록 만듦.
// string.length 로 값을 할당하게 됨.


만약 post 객체의 author 프로퍼티가 없다고 해도 위처럼 Non Null 단언을 하면 null 이 아니라고 믿기 때문에 주의가 필요하다.
단언을 사용시 조심스럽게 확실할 때만 사용하는 것을 권장한다.


참고링크 : https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8#

 

한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런

이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론

www.inflearn.com