TypeScriptの静的型付けの方針(?)で、静的に代入を許すことができてしまいます。 しかもここで紹介する、x.aを変更する方法では、asなどのunsafeな操作は必要としません。 結論 結論からお話します。 下記コードで、x.aが10に変更できます! const x: { readonly a: number } = { a: 42 } const y: { a: number } = x // x.aが変更されている y.a = 10 console.log(x) // { a: 10 } // コンパイルエラーはない { a: number } extends { readonly a: number }になっているから = { a: number }の変数に{ readonly a: number }の値を代入できるからです! 読み始める前に 本稿の主題は「静的型付き下でrea
![最速TypeScript静的型付け不健全プログラミング~readonlyプロパティに値を再代入する~ - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/2e3aa3af3e2d00b964929244df92c7a026ec879d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZ0eHQ9JUU2JTlDJTgwJUU5JTgwJTlGVHlwZVNjcmlwdCVFOSU5RCU5OSVFNyU5QSU4NCVFNSU5RSU4QiVFNCVCQiU5OCVFMyU4MSU5MSVFNCVCOCU4RCVFNSU4MSVBNSVFNSU4NSVBOCVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MiVCMCVFMyU4MyVBOSVFMyU4MyU5RiVFMyU4MyVCMyVFMyU4MiVCMCVFRiVCRCU5RXJlYWRvbmx5JUUzJTgzJTk3JUUzJTgzJUFEJUUzJTgzJTkxJUUzJTgzJTg2JUUzJTgyJUEzJUUzJTgxJUFCJUU1JTgwJUE0JUUzJTgyJTkyJUU1JTg2JThEJUU0JUJCJUEzJUU1JTg1JUE1JUUzJTgxJTk5JUUzJTgyJThCJUVGJUJEJTlFJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1kY2M1NzZkMjM1NjMwMDVkNjQ5Y2JkNDY3NzQ2YmFjOQ%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwYWl5YTAwMCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YzNmMTM4MGZhNzk1OWEyYzgwZTQyYjMwYjE0N2YyNTI%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D4064c8866d7dcf533192567895a9179c)