타입 단언이 뭘까
type Person = {
name: string;
age: number;
};
let person: Person = {}; // ❌ 에러 발생
person.name = "";
person.age = 23;
위와 같은 코드가 있다고 해보자. Person 타입으로 선언했지만, 빈 객체로 초기화했기 때문에 에러가 발생한다.
이럴 때 이용하는 것이 타입 단언이다. 타입 단언을 이용하면 빈 객체도 Person 타입으로 만들 수 있다.
type Person = {
name: string;
age: number;
};
let person = {} as Person;
person.name = "";
person.age = 23;
초과 프로퍼티에서도 유용!
정말 어쩔 수 없이 기존 타입에 특정 프로퍼티를 추가해야 할 때도 이용 가능하다.
type Dog = {
name: string;
color: string;
};
let dog: Dog = {
name: "돌돌이",
color: "brown",
breed: "진도",
} as Dog
타입 단언의 규칙
- A가 B의 슈퍼타입이거나
- A가 B의 서브타입이어야 한다.
let num1 = 10 as never; // ✅ 10은 never의 슈퍼타입 (업 캐스팅)
let num2 = 10 as unknown; // ✅ 10은 unknown의 슈퍼타입 (업 캐스팅)
let num3 = 10 as string; // ❌ number와 string 타입은 슈퍼-서브 관계가 아니다. 겹치지 않는다.
let num3 = 10 as unknown as string; // ✅ 다중 단언을 이용하면 통과한다. 근데 쓰지말자.
const 단언
일반적인 변수를 const로 선언한 것 처럼 만들어주는 방법
주로 객체 타입에서 사용된다. 모든 프로퍼티가 읽기 전용이 된다. 매번 readonly
를 붙여줄 필요가 없다.
let num4 = 10 as const;
// 10 Number Literal 타입으로 단언됨
let cat = {
name: "야옹이",
color: "yellow",
} as const;
// 모든 프로퍼티가 readonly를 갖도록 단언됨
Non null 단언
익명 게시글 작성이 가능할 때 아래와 같은 코드가 있다고 하자.
Non Null 단언은 지금까지 살펴본 값 as 타입 형태를 따르지 않는 단언이다. 값 뒤에 느낌표(!) 를 붙여주면 "이 값은 undefined
이거나 null
이 아니야!" 하고 단언할 수 있다.
type Post = {
title: string;
author?: string;
};
let post: Post = {
title: "게시글1",
};
const len: number = post.author!.length;
'Language > TypeScript' 카테고리의 다른 글
[TypeScript] 서로소 유니온 타입 : 묶어서 선언할 때 유의할 점 (0) | 2025.04.28 |
---|---|
[TypeScript] instanceof와 in 타입 가드 (0) | 2025.04.28 |
[TypeScript] 객체 타입 간 호환성 (0) | 2025.04.22 |
[TypeScript] 객체 타입의 값을 변경할 때 주의사항 : 불변성 (0) | 2025.04.16 |
[TypeScript] 타입 호환성 : 업캐스팅과 다운캐스팅 (0) | 2025.04.11 |