type Person = {
name: string;
age: number;
};
let person: Person = {};
// Person으로 미리 타입을 선언했을 때에는 초깃값에 name, age가 없으므로 타입 오류가 발생됨.
person.name = "신봄";
person.age = 23;
let person = {};
// 아래와 같이 나중에 속성을 추가하기 위해 person에 아무런 타입을 제공하지 않으면, 타입의 초깃값이 {}로 처리됨에 따라, 아래코드가 타입오류가 발생되게 된다.
person.name = "신봄";
person.age = 23;
이를 해결하기 위해 타입 단언 을 사용한다.
타입 단언을 사용하는 방법은 as를 사용하면 된다.
let person = {} as Person;
person.name = "신봄";
person.age = 23;
type Dog = {
name: string;
color: string;
};
let dog: Dog = {
name: "돌돌이",
color: "brown",
bread: "진도", // bread 타입 오류 발생
};
let dog: Dog = {
name: "돌돌이",
color: "brown",
bread: "진도",
} as Dog;
// 위처럼 타입 단언을 하게 되면 초과 타입 검사가 발생하지 않는다.
타입 단언의 조건
아래 두가지 조건 중 한가지를 반드시 만족해야 함.
A가 B의 슈퍼 타입이다.
A가 B의 서브 타입이다.
다중 단언
let num3 = 10 as unknown as string;
// 이렇게 하면 타입을 두번 단언하므로, 타입 오류는 사라지게 된다.
절대 좋은 방법은 아니다. 꼭 필요한 상황에서만 이용하기를 권장한다.
const 단언
변수 const로 선언한 것처럼 타입이 변경됨
let number4 = 10 as const;
let cat = {
name: "겨울이",
color: "white",
} as const;
cat.name = // 읽기전용 속성으로 name에 할당할 수 없음 (타입 오류 발생)
Non Null 단언
타입스크립트에 null이거나 undefined 가 아님을 알려주는 단언
type Post = {
title: string;
author?: string;
};
let post: Post = {
title: "게시글",
author: "신봄",
};
const length: number = post.author?.length; // number | undefined 으로 할당할 수 없다고 하는 타입에러 발생
const length: number = post.author!.length;