Reinterpret a type parameter constrained to any as an upper bound constraint#29571
Conversation
|
@typescript-bot test this |
|
Heya @RyanCavanaugh, I've started to run the extended test suite on this PR at 570c756. You can monitor the build here. It should now contribute to this PR's status checks. |
|
Also run on DT |
|
@typescript-bot run dt |
|
Heya @weswigham, I've started to run the Definitely Typed test suite on this PR at 7c13b70. You can monitor the build here. It should now contribute to this PR's status checks. |
|
Updated the test that needed changing to a constraint that actually typechecks, and looked at DT - failures are in So this seems pretty good - if anything, like the tests I just changed, it's going to identify places we were silently allowing unsafe operations. |
|
@weswigham let's merge for 3.5 |
|
@weswigham this sounds like it's ready to go, right? |
|
Probably. The change itself is small, so barring merge conflicts, should still be OK. |
|
After a merge from master: toString is now available on type parameters that extend any. That's the only difference I can see. |
|
Let's wait until @RyanCavanaugh is back to merge this. |
|
I talked to @RyanCavanaugh about this just now, so I'm going to merge it. |
|
@weswigham this causes a failure in DT on wordpress__block-editor-tests.tsx. Can you try to fix it? It looks like the offending signature is this: declare function withColorContext<
ProvidedProps extends Partial<withColorContext.Props>,
OwnProps extends any,
T extends ComponentType<ProvidedProps & OwnProps>
>(component: T):
T extends ComponentType<infer U> ? ComponentType<
Omit<U, 'colors' | 'disableCustomColors' | 'hasColorsToChoose'> &
Omit<ProvidedProps, 'hasColorsToChoose'>> :
never;Previously the second type argument was inferred If there's a mechanical fix to update existing code, it'd worthwhile to have that in the release notes for 3.9. |
Write an eg, type GetClass<T extends any> = T["class"];
// could be
type GetClass<T> = Extract<T, {class: any}>["class"];obviously, you can replace
What's broken about it? the signature itself has nothing wrong as far as I can tell, so you're talking about a specific usage, right? |
If the answer is "we now infer |
|
Yes, line 142 of the tests. Probably |
Fixes #29509
Note, that we have a test that asserts that a type parameter explicitly extending
anybehaves likeanywhen accessing its members (which IMO is strange). This would be a break to that behavior.