Распространяется ли мелкое клонирование также на модификатор свойств в машинописном тексте

#javascript #typescript #ecmascript-6

Вопрос:

Допустим, у нас есть такой класс, как:

 class ExampleOject {
   readonly readOnlyProperty = 'HttpErrorResponse';
   otherProperty: string;
}
 

Можно ли выполнить следующую операцию:

 let clonedObj = { ...obj1 }; // while obj1 is an instance of type ExampleOject 
clonedObj.readOnlyProperty = 'Other Value';
 

Другими словами: Распространяется ли неглубокое клонирование также на модификатор свойств в машинописном тексте? Итак, это clonedObj.readOnlyProperty также readonly и не должно быть изменено?

Моя среда разработки (Webstorm) показывает мне TS2540 . Но я могу скомпилировать этот код.

Ответ №1:

TS в конечном итоге скомпилируется в JS, и у нас нет readonly полей и статических типов в JS. Ваш код будет скомпилирован в:

 "use strict";
class ExampleOject {
    constructor() {
        this.readOnlyProperty = 'HttpErrorResponse';
        otherProperty: string;
    }
}
const obj1 = {};
let clonedObj = Object.assign({}, obj1); // while obj1 is an instance of type ExampleOject 
clonedObj.readOnlyProperty = 'Other Value';