규칙 4.2
4장, 타입 테스트
A type alias is another name for its target.
An alias of a scalar, a vector, an array, or a struct must resolve wherever a type may stand, and an alias, an interface, or a class over an object type is one struct.
A builtin type name must win over an alias of the same name, so type vec3 = f32 does not make vec3 a scalar.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
the first two clauses are what a type alias means in TypeScript and in WGSL alike. The third is a recorded divergence from WGSL, where a module-scope declaration hides the predeclared object of the same name. It is kept because a file that re-types a builtin name would make every later use of that name mean something no reader of the surface can see.
출처
Type Aliases for the resolution; surface §2 (roadmap 0.3 item T2) for the precedence, which reverses Declaration and Scope (“predeclared objects, and objects declared at module-scope, are in scope across the entire program source”, and the example “Shadowing predeclared objects”, where a module-scope fn min() hides the builtin).
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
src/compiler/ts/type-alias.test.ts (resolution, and “an alias cannot shadow a builtin name”) and TS8023 DUPLICATE_SYMBOL for a second declaration of one struct name, whether or not anything uses the struct (#172), pinned by src/compiler/ts/type-structs.test.ts.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8023DUPLICATE_SYMBOL - The same function, binding, module constant or struct name declared twice in one scope.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:273(설계 문서)reqs/rules/RULE-0402.md(추적 항목)