Rule 8.12
On this page

Rule 8.12

Chapter 8, Functions and entry points Test

A private name #x must be emitted without its #: a field as the struct member x, a method as Owner_x, an accessor as Owner_get_x and Owner_set_x, a static field as Owner_x. It may be named only inside the body of the class that declares it, which is TypeScript’s rule and which the front end enforces because it does not run the checker; a public name never reaches a private member, and an object literal, a spread and a destructuring pattern do not reach one either. Two members of one class chain that would share an emitted name (#x beside x, a static field beside a function of its name, or #x declared by a class and again by one that extends it) must be refused.

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

Rationale

WGSL and GLSL ES 3.00 have no private member and no # in a name, so privacy is a property of the source that the front end keeps, and it can keep it only while no emitted name stands for two members.

Derives from

ECMAScript private names as TypeScript spells them (TS18013 for an access from outside, TS2741 for a literal of such a class); Rule 3.2; 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 an access from outside the class, for two members on one function name and for a static field and a function on one module name (The static field "Base.#n" and the function "Base.n" would both be "Base_n": a private name is emitted without its "#". Rename one of them.), TS8010 STRUCT_FIELD for two members on one struct member and for an object literal of a class with a private field, pinned by src/compiler/ts/class-syntax.test.ts; examples/class-syntax.shade.ts.

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:

TS8010 STRUCT_FIELD
An invalid struct field or declaration shape.
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