Rule 8.11
On this page

Rule 8.11

Chapter 8, Functions and entry points Test

A get or set accessor is a function of the module, Owner_get_x or Owner_set_x, which takes its object as a method does (Rule 8.10); a read of o.x must call the getter, and an assignment, a compound assignment, ++ and -- must call the setter with the new value, the compound forms reading the old one through the getter. The nearest class of a chain that declares either half of an accessor owns both, as in TypeScript, and either half’s annotation types the other when one has none. super.x must call the half of x that the nearest class above the one that wrote the body declares, lowered for this class and run on this body’s object. A read of an accessor with no getter, a write of one with no setter, a super.x whose class above declares the other half alone or names an instance field, which is the object’s own, and a write into what a getter returns (o.pos.x = 1.), which is a copy, must be refused with the remedy.

The rule text and the parts under it are the compiler's own English, as the design document writes them.

Rationale

an accessor is TypeScript’s own spelling of a computed or checked property, and a function for each half is all it is once this has a name; a getter hands back a value and not a place, so a write through its result would change a copy and be lost where TypeScript changes the object.

Derives from

ECMAScript method definitions (get and set) as TypeScript spells them; Function Calls; surface §26.

How it is verified

Checked by a test. A test, a gate script or a CI workflow names this rule, and the traceability check fails when a file listed below stops naming it.

Where the rule says the compiler enforces it:

TS8035 CLASS_MEMBER for each refusal ("C.y" has a getter and no setter, so it cannot be assigned. Declare "set y(value)" beside the getter.; "super.x" names a field, and a field is the object's own, which "super" does not reach. Write "this.x".) and TS8018 ASSIGN_TARGET for a write through a getter, pinned by src/compiler/ts/class-syntax.test.ts, which also holds the three CPU paths to the value the WGSL and GLSL ES 3.00 text computes; examples/class-syntax.shade.ts and examples/class-builder.shade.ts in the compile gate.

The files that verify it at commit 26de7be8, each at the first line that names the rule:

Explained in

The sections of the surface document that explain this rule, at commit 26de7be8:

Error codes that enforce it

The diagnostic codes the rule names under Enforced by, or whose registry text names the rule:

TS8018 ASSIGN_TARGET
An assignment or ++/-- target that is not a writable place, such as a temporary or an input that has no writable value local.
TS8035 CLASS_MEMBER
A class member shape the surface does not take, or a use of a member the class rules refuse, and a new that builds no class (Rule 8.13).

See also

Source

The rule at commit 26de7be8:

Edit this page Report a problem