constアサーション「as const」とreadonlyの違い

オブジェクトの末尾にconstアサーション「as const」をつけると、オブジェクトすべてのプロパティに「readonly」がついた状態になる。「as const」がついたオブジェクトのプロパティに、再代入はできない。

const foo = {
    nation: "India",
    sex: "male",
    name: "chandora"
} as const

foo.sex = "female"
=> Cannot assign to 'sex' because it is a read-only property.

一方、readonlyはプロパティごとにつけられる。

type Person = {
    name: string,
    readonly age: number,
}

const person:Person = {
    name: "murata",
    age: 12,
}

// nameプロパティには再代入できている。
person.name = "nakata"
person.age = 33
=> Cannot assign to 'age' because it is a read-only property.