Skip to content

fix/select types#25

Merged
jonasnobile merged 3 commits intomainfrom
fix/select-types
Apr 22, 2026
Merged

fix/select types#25
jonasnobile merged 3 commits intomainfrom
fix/select-types

Conversation

@jonasnobile
Copy link
Copy Markdown
Member

No description provided.

jonasnobile and others added 3 commits April 22, 2026 08:26
When the second slot is `any`, TypeScript fails to infer the entity for
narrowly-selected refs (e.g. `entity.family` typed via
`createComponent().entity(s, e => e.family(f => f.name()))`). The mapped-type
half of the alias intersection poisons inference and the conditional silently
falls through to `object`. Letting TS pick the second slot via `infer _S`
restores correct inference.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
`HasOneRef<T,S,...>` and `EntityRef<T,S,...>` are aliases that intersect a
plain interface with a mapped type, which makes hand-rolled
`F extends HasOneRef<infer E, any> ? E : ...` patterns fail to infer when
`S` is a narrow subset of `T`. Routing through `*RefInterface` sidesteps
that. Expose the helpers and document the pitfall on the alias declarations
so consumers don't reinvent the broken pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Documents the broken `<infer T, any>` patterns as regression guards, alongside
the safe `<infer T, infer _S>` form and the new ExtractHasOneEntity /
ExtractHasManyEntity / ExtractEntityRefEntity helpers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jonasnobile jonasnobile merged commit 2d1e1f9 into main Apr 22, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant