fix(classes.doc): Avoid emitting instance fields for collection and manager to preserve decorator-defined prototype getters
This commit is contained in:
@@ -78,3 +78,21 @@ All 157 tests passing across 10 test files:
|
||||
3. `Symbol.metadata` on constructors is read-only (managed by runtime)
|
||||
4. Field decorators run before class decorators (guaranteed order)
|
||||
5. TypeScript 5.2+ has built-in TC39 decorator support
|
||||
|
||||
## ES2022 Class Fields & Prototype Getters - Fixed in v7.0.15
|
||||
|
||||
### Issue
|
||||
ES2022 class fields (`useDefineForClassFields: true`) create own properties during construction that shadow prototype getters defined by decorators.
|
||||
|
||||
### Solution
|
||||
Use `declare` keyword for instance properties that are accessed via prototype getters:
|
||||
```typescript
|
||||
// In SmartDataDbDoc (ts/classes.doc.ts):
|
||||
declare public collection: SmartdataCollection<any>; // Type-only, no JS emitted
|
||||
declare public manager: TManager; // Type-only, no JS emitted
|
||||
```
|
||||
|
||||
### Key Insight
|
||||
- `declare` tells TypeScript this is a type-only declaration
|
||||
- No JavaScript code is emitted for `declare` properties
|
||||
- Prototype getters defined by `@Collection` and `@managed` decorators are no longer shadowed
|
||||
|
||||
Reference in New Issue
Block a user