TS 17 ~ 18

ClassBinu·2024년 4월 26일

17 readonly

프로퍼티나 배열의 요소가 변경되지 않도록 함.

const arr: readonly number[] = [1, 2, 3];

arr[0] = 4;
arr.push(5);

readonly로 배열을 선언하면 push가 아예 없다는 에러가 나온다.

'readonly number[]' 형식에 'push' 속성이 없습니다.ts(2339)

readonly는 얕게 동작한다.
즉, 최상위 수준의 속성들은 변경 불가능하지만 그 요소가 참조하는 다른 객체의 내부 상태는 변경할 수 있다.

const와 readonly 차이는?

18 매핑된 타입으로 값 동기화

매핑된 타입: 기존 타입을 바탕으로 새로운 타입을 만들어내는 기능

예)

interface Person {
    name: string;
    age: number;
}

type ReadonlyPerson = {
    readonly [K in keyof Person]: Person[K];
};

const person: ReadonlyPerson = {
    name: "John",
    age: 30
};

person.name = "Jane"; // 오류: name은 읽기 전용 속성이므로 할당할 수 없습니다.

0개의 댓글