type Person = { name: string; age: number };

// 아래는 타입추론에서 : {} 어노테이션으로 판단
// 프로퍼티 name, age가 없으므로 오류
let who = {};
who.name = "hong";
who.age = 100;

// 필수 프로퍼티가 할당 안됨.
let who2: { name: string; age: number } = {};

// 옵션은 개발자의 의도가 아닌 회피 방법
let who3: { name?: string; age?: number } = {};

// 최종 책임을 개발자가 지겠다. 타입 검사 취소
let who4 = {} as Person;
who4.name = "hong";
who4.age = 12;
// who4.go = 100; // 잘 체크한다.

1. any 타입을 명확한 타입으로 단언

let value: any = "hello";
let count: number = (value as string).length;

2. DOM 을 활용할 때

const root = document.getElementById("root") as HTMLElement;
const inputTag = document.querySelector("input");
(inputTag as HTMLInputElement).value = "hi";

3. 유니온 타입중 하나를 지정하기

type User = { name: string };
type Admin = { name: string; admin: boolean };
let person: User | Admin = { name: "hong", admin: true };
console.log((person as Admin).name);

4. Null 이 아닌 값으로 단언

let tag = document.querySelector("div");
// 절대 null 아니라고 알려주기
(tag as HTMLDivElement).innerHTML = "hello, world";

5. const 단언

let num = 10 as const;

// as const 활용시 readonly 가 셋팅되서 변경 불가
let animal = {
  name: "cat",
  age: 10,
} as const;
animal.age = 10;

// 아래처럼 된다
let animal2: {
  readonly name: "cat";
  readonly age: 10;
};

20250122114608.png