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

Make the unconstrained type parameter and {} assignability rule not apply under strictNullChecks #48366

Merged
merged 2 commits into from
Mar 23, 2022

Conversation

weswigham
Copy link
Member

A revised version of #33570 that, per the request at the last design meeting, only removes the rule under strictNullChecks.

Note that this does not really fix #32330 like #33570 does, because the original report does not include anything about strict mode, nor is the observed behavioral issue limited to strict mode.

@typescript-bot typescript-bot added Author: Team For Milestone Bug PRs that fix a bug with a specific milestone labels Mar 21, 2022
src/compiler/diagnosticMessages.json Outdated Show resolved Hide resolved
@weswigham weswigham merged commit 8cd4b7a into microsoft:main Mar 23, 2022
@andrewbranch andrewbranch added the Breaking Change Would introduce errors in existing code label Mar 25, 2022
glasser added a commit to apollographql/apollo-server that referenced this pull request Apr 11, 2022
Two things got a bit mixed together here.

One is that we want the Disabled plugins to all be defined directly in
plugin/index.ts, so that loading ApolloServerPluginInlineTraceDisabled
does not spend time loading the protobuf library.

The other thing is that we started thinking a bit more carefully about
plugin context generics. We wrote some tests to make sure that you can
use an `ApolloServerPlugin<BaseContext>` (ie, a plugin that doesn't need
any particular fields on the context) with any `ApolloServer`, but not
vice versa. As part of getting this to work, we added another
`__forceTContextToBeContravariant`. We also noticed that it made more
sense for BaseContext to be `{}` ("an object with no particular fields")
rather than `Record<string, any>` ("an object where you can do anything
with any of its fields").

We investigated whether the new contravariance annotation coming in the
next two months in TS 4.7
(microsoft/TypeScript#48240) would allow us to
get rid of the `__forceTContextToBeContravariant` hack and the answer is
yes! However, trying `4.7.0-beta` failed for two other reasons. One is
that microsoft/TypeScript#48366 required us to
add some missing `extends` clauses, which we are doing now in this PR.
The other is that `graphql-tools` needs some fixes to work with TS4.7
which we hope they can do soon
(ardatan/graphql-tools#4381).
@HolgerJeromin
Copy link
Contributor

Found Object.assign(undefined, {}); in my code. Thanks! :-)

RyanCavanaugh added a commit to RyanCavanaugh/TypeScript that referenced this pull request May 26, 2022
…pply under strictNullChecks (microsoft#48366)

* Make the unconstrained type parameter and {} assignability rule not apply under strictNullChecks

* Fix lint, PR feedback
# Conflicts:
#	src/compiler/checker.ts
#	tests/baselines/reference/unknownType1.errors.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Author: Team Breaking Change Would introduce errors in existing code For Milestone Bug PRs that fix a bug with a specific milestone
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Generic bounds not enforced on generic argument
5 participants