为什么打字稿中的 'readonly' 属性 不起作用?

Why is the 'readonly' property in typescript not working?

interface ReadExample {
    readonly book_id: number,
    book_name: string
}

class Book implements ReadExample{
    book_id= 3;
    book_name = 'A Thousand Stars';
    constructor(book_id:number, book_name:string){
        this.book_id = book_id;
        this.book_name = book_name;
    }

}
let book: Book = new Book(2, 'Sis');
console.log(book);
book.book_name = 'Sister';
book.book_id = 3;
console.log(book);

为什么这没有给我任何错误。您会看到 属性 book_id 是只读的。那么,当我尝试分配 book.book_id = 3 时,为什么它不会在这里抛出错误?不违反readonly吗?

因为 Typescript 中的只读实际上不是只读的。

我不完全理解它,但您可以在这个 Github 问题中找到关于它的讨论:https://github.com/microsoft/TypeScript/issues/13002

作为一名程序员,我学习和成长得越多,我就越觉得那里有很多废话。 Readonly 很糟糕,它并不像您期望的那样“正常工作”。

你能做的最好的事情就是不要做你正在做的事情。