@tracked: lazy evaluation
- Dominant language
- TypeScript
- Stars
- 22.6k
- Forks
- 4.2k
- Avg merge
- 3d 12h
- Merged PRs (30d)
- 15
Description
While investigating #18075, I noticed a minor issue, that persists even after the change to `WeakMap` in #18091, because of the lazy evaluation
```ts
class Foo {
@service someService;
@tracked someProp = this.someService.serviceProp;
}
```
Assume `Foo` gets created by a container lookup or get manually called
`setOwner` on.
_Intuitively_ I would expect the above code to work. And it does.
If `this.someProp` is only accessed later in the template or in `init`, everything works fine.
However, if you already access `this.someProp` in the `constructor`, you get a `TypeError`, because `this.someService` is `undefined`.
While I understand why, I still think this is inconsistent. If we decide to keep lazy evaluation of the initializers, we need to document it well. Would the new static decorators proposal support lazy evaluation in the first place?
Contributor guide
Assessment
This issue has not been assessed yet.