규칙 8.11
8장, 함수와 진입점 테스트
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.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
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.
출처
ECMAScript method definitions (get and set) as TypeScript spells them; Function Calls; surface §26.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
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.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8018ASSIGN_TARGET - An assignment or
++/--target that is not a writable place, such as a temporary or an input that has no writable value local. -
TS8035CLASS_MEMBER - A class member shape the surface does not take, or a use of a member the class rules refuse, and a
newthat builds no class (Rule 8.13).
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:728(설계 문서)reqs/rules/RULE-0811.md(추적 항목)