Stricter type definition of Subject#5307
Merged
benlesh merged 3 commits intoReactiveX:masterfrom Apr 3, 2020
Merged
Conversation
6 tasks
cartant
reviewed
Feb 10, 2020
Collaborator
cartant
left a comment
There was a problem hiding this comment.
This LGTM, but I would like to see a test that uses Subject<void> and calls next().
Contributor
Author
|
@cartant I added tests and some documentation to explain the breaking change and the motivation for choosing |
Member
|
Nevermind, this is only a breaking change for TS 2.x and lower, which we would be breaking for people in v7 anyhow. |
benlesh
approved these changes
Apr 3, 2020
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description:
Make type definition of
Subjectmore strict to avoid common bugs when using Subject.Related issue (if exists):
This issue been discussed extensively in #2852 and #5066 .
Sensitive points
As discussed in the issues linked above, it is possible to omit the argument to
nextwhen the Subject is of typeSubject<void>.When the template type is anything other than
void, then an argument fornextis required.The primary case where this can be a problem is when people instantiate
Subject<any>and then usesubject.next()with no arguments. This will break.The present change makes the default template type of Subject
voidinstead ofany. This means that when you writenew Subject(), you get aSubject<void>(instead ofSubject<any>) and are therefore able to writesubject.next()orsubject.next(value)ifvalueis eitheranyorundefined.Other good candidates for default template type are
unknownandany. We can discuss whethervoidis the best choice here, I am not completely sure yet.