[TS] 타입 단언

짱효·2024년 1월 15일
0

📖 TypeScript

목록 보기
15/20

타입 단언

  • 타입을 실제로 바꾸는게 아니라 컴파일러의 잠시 눈을 가리게하는.
  • 단언은 위험한 문법이다.
let person= {}

변수를 선언해주고

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

타입을 만들어서 변수에 Person 타입을 주면 에러가 난다.

🚨let person: Person = {}

person 변수에 Person타입에 해당하는 값이 없어서.

그럼..

person.name = "이정환"
person.age = 27;

이렇게 넣어줘도 에러가 난다.

🚨let person= {}
person.name = "이정환"
person.age = 27;

그럼 다시 이렇게 Person 타입을 지워도 에러가 난다.
왜냐 person 변수는 빈값으로({}) 이미 타입 추론했기 때문에
그럼.. any를 쓸까?? 그건 안됨.

해결법(타입 단언)

상황) 타입에 정의 되지 않은 값을 어쩔 수 없이 추가해야하는 상황

as Dog로 타입 단언해준다.

타입 단언 규칙

  • 값 as 단언 <- 단언식

  • A as B

    • A가 B의 슈퍼타입이거나
    • A가 B의 서브타입이어야 함

다중 단언(쓰지말자)

const 단언

  • as const를 붙이면 타입이 readonly가 되면 수정 불가능
  • 모든 타입에 readonly 붙이지 않고 as const만 넣어주면 된다.

Non Null 단언


?!로 바꿔주기 = nuil과 undefined 가 아니야!!!

  • 타입스크립트가 그냥 믿음..(오류 발생 가능성 높음)

전체코드

</**
 * 타입 단언
 */
type Person = {
    name: string;
    age: number;
}


let person= {} as Person
person.name = "이정환"
person.age = 27;

type Dog = {
    name: string;
    color: string;
}

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

/**
 * 타입 단언의 규칙
 * 값 as 단언 <- 단언식
 * A as B
 * A가 B의 슈퍼타입이거나
 * A가 B의 서브타입이어야 함
 * 
 */

let num1 = 10 as never;
let num2 = 10 as unknown;
// 다중단언 (쓰지말자)
let num3 = 10 as unknown as string;

/**
 * const 단언
 */

let num4 = 10 as const;

let cat = {
    name: "야옹이",
    color: "yellow",
}as const;

// cat.name = ""

/**
 * Non Null 단언
 */

type Post = {
    title: string;
    author?: string;
};\

let post : Post = {
    title: "게시글",
    author: "이정환"
}
// ! === 값이 있엌!!!
const len : number = post.author!.length;
profile
✨🌏확장해 나가는 프론트엔드 개발자입니다✏️

0개의 댓글