type Person = {
name: string;
age: number;
};
let person: Person = {};
person.name = "";
person.age = 23;
타입스크립트는 위와 같은 방식으로 빈 객체로 초기화가 불가능
type Person = {
name: string;
age: number;
};
let person = {} as Person;
person.name = "";
person.age = 23;
위와 같이 as Person으로 단언해주면 됨.
값 as 타입 형식의 단언식을 A as B로 표현했을 때,
아래의 두가지 조건중 한가지를 반드시 만족해야 함.
1. A가 B의 슈퍼타입이다
2. A가 B의 서브타입이다
let num1 = 10 as never; // ✅
let num2 = 10 as unknown; // ✅
let num3 = 10 as string; // ❌
즉, 같은 수직구조에 속해있어야 타입 단언이 가능하다.
위의 코드를
let num3 = 10 as unknown as string;
다중으로 단언 가능. 하지만 매우 좋지 않은 방식.
let num4 = 10 as const;
// 10 Number Literal 타입으로 단언됨
let cat = {
name: "야옹이",
color: "yellow",
} as const;
// 모든 프로퍼티가 readonly를 갖도록 단언됨
변수 -> 리터럴 타입
객체 프로퍼터 -> readonly
type Post = {
title: string;
author?: string;
};
let post: Post = {
title: "게시글1",
};
const len: number = post.author!.length;
위와 같이 값 뒤에 !를 붙여, undefined나 null이 아님을 단언.