Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MakePrimitiveRef generic so that UNDEFINED_REFERENCE can be Reference<undefined> rather than Reference<unknown> #1481

Merged
merged 1 commit into from
Nov 1, 2023

Conversation

NullVoxPopuli
Copy link
Contributor

ran in to this when trying to update glimmer-vm in ember-source, here: emberjs/ember.js#20561

in particular:

packages/@ember/-internals/glimmer/lib/renderer.ts:396:47 - error TS2345: Argument of type 'Reference<unknown>' is not assignable to parameter of type 'Reference<OutletState | undefined>'.
  Type 'unknown' is not assignable to type 'OutletState | undefined'.

396     let dynamicScope = new DynamicScope(null, UNDEFINED_REFERENCE);
                                                  ~~~~~~~~~~~~~~~~~~~

this should be resolved after this PR

@NullVoxPopuli NullVoxPopuli changed the title MakePrimitiveRef generic so that UNDEFINED_Reference can be Reference<undefined> rather than Reference<unknown> MakePrimitiveRef generic so that UNDEFINED_REFERENCE can be Reference<undefined> rather than Reference<unknown> Nov 1, 2023
@@ -56,8 +56,8 @@ class ReferenceImpl<T = unknown> implements Reference<T> {
}
}

export function createPrimitiveRef(value: unknown): Reference {
const ref = new ReferenceImpl(UNBOUND);
export function createPrimitiveRef<T = unknown>(value: T): Reference<T> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don’t think you need = unknown here.

I wonder if you will catch any unexpected/unintended usages if you do T extends string | number | boolean | null | undefined (we may have a type alias for that already somewhere)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don’t think you need = unknown here.

I will try this out in a followup PR!
Since it's so hard to iterate between this PR and ember, I want try as isolated changes at a time as possible

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure. The = unknown is redundant regardless of whether the constraints work out or not. As far as I know it would always have inferred (to unknown in the worst case). For types/interface sometimes you need to say = unknown to be able to reference the type more easily, but I don’t think that’s needed in a function parameter position

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we may have a type alias for that already somewhere

looks like it's just duplicated everywhere -- probably good for better errors, tbh

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@NullVoxPopuli NullVoxPopuli merged commit 3f6f3fe into master Nov 1, 2023
5 checks passed
@NullVoxPopuli NullVoxPopuli deleted the make-createPrimitiveRef-generic branch November 1, 2023 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants