tests/cases/compiler/readonlyMembers.ts(6,3): error TS2540: Cannot assign to 'a' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(7,3): error TS2540: Cannot assign to 'b' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(16,14): error TS2540: Cannot assign to 'c' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(18,18): error TS2540: Cannot assign to 'a' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(19,18): error TS2540: Cannot assign to 'b' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(20,18): error TS2540: Cannot assign to 'c' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(24,14): error TS2540: Cannot assign to 'a' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(25,14): error TS2540: Cannot assign to 'b' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(26,14): error TS2540: Cannot assign to 'c' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(35,3): error TS2540: Cannot assign to 'a' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(39,3): error TS2540: Cannot assign to 'a' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(48,3): error TS2540: Cannot assign to 'A' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(55,3): error TS2540: Cannot assign to 'a' because it is a read-only property. tests/cases/compiler/readonlyMembers.ts(61,1): error TS2542: Index signature in type '{ readonly [x: string]: string; }' only permits reading. tests/cases/compiler/readonlyMembers.ts(64,1): error TS2542: Index signature in type '{ readonly [x: number]: string; [x: string]: string; }' only permits reading. ==== tests/cases/compiler/readonlyMembers.ts (15 errors) ==== interface X { readonly a: number; readonly b?: number; } var x: X = { a: 0 }; x.a = 1; // Error ~ !!! error TS2540: Cannot assign to 'a' because it is a read-only property. x.b = 1; // Error ~ !!! error TS2540: Cannot assign to 'b' because it is a read-only property. class C { readonly a: number; readonly b = 1; get c() { return 1 } constructor() { this.a = 1; // Ok this.b = 1; // Ok this.c = 1; // Error ~ !!! error TS2540: Cannot assign to 'c' because it is a read-only property. const f = () => { this.a = 1; // Error ~ !!! error TS2540: Cannot assign to 'a' because it is a read-only property. this.b = 1; // Error ~ !!! error TS2540: Cannot assign to 'b' because it is a read-only property. this.c = 1; // Error ~ !!! error TS2540: Cannot assign to 'c' because it is a read-only property. } } foo() { this.a = 1; // Error ~ !!! error TS2540: Cannot assign to 'a' because it is a read-only property. this.b = 1; // Error ~ !!! error TS2540: Cannot assign to 'b' because it is a read-only property. this.c = 1; // Error ~ !!! error TS2540: Cannot assign to 'c' because it is a read-only property. } } var o = { get a() { return 1 }, get b() { return 1 }, set b(value) { } }; o.a = 1; // Error ~ !!! error TS2540: Cannot assign to 'a' because it is a read-only property. o.b = 1; var p: { readonly a: number, b: number } = { a: 1, b: 1 }; p.a = 1; // Error ~ !!! error TS2540: Cannot assign to 'a' because it is a read-only property. p.b = 1; var q: { a: number, b: number } = p; q.a = 1; q.b = 1; enum E { A, B, C } E.A = 1; // Error ~ !!! error TS2540: Cannot assign to 'A' because it is a read-only property. namespace N { export const a = 1; export let b = 1; export var c = 1; } N.a = 1; // Error ~ !!! error TS2540: Cannot assign to 'a' because it is a read-only property. N.b = 1; N.c = 1; let xx: { readonly [x: string]: string }; let s = xx["foo"]; xx["foo"] = "abc"; // Error ~~~~~~~~~ !!! error TS2542: Index signature in type '{ readonly [x: string]: string; }' only permits reading. let yy: { readonly [x: number]: string, [x: string]: string }; yy[1] = "abc"; // Error ~~~~~ !!! error TS2542: Index signature in type '{ readonly [x: number]: string; [x: string]: string; }' only permits reading. yy["foo"] = "abc";