#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';