Improve types of result.stdout|stderr|all
#681
Merged
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.
Fixes #673.
Most of the time, we know that
result.stdout|stderr|all
is defined. However, we currently type it as possiblyundefined
. For example, the following fails becomesstdout
is typed asstring | undefined
even though we know it cannot beundefined
.The reverse is true: we sometimes know that
result.stdout|stderr|all
isundefined
. Typing it asundefined
instead ofstring | undefined
would help TypeScript users realize they cannot use that property. For example, when using thebuffer: false
option or thestdout: 'inherit'
option, users cannot retrieveresult.stdout
. The type should then beundefined
, notstring | undefined
.This PR implements this. The stream output is now correctly either
undefined
,string
orUint8Array
.This PR works with all the following cases:
result.stdio
propertystdio: string
optionstdio: array
optionstdio
option with more than 3 itemsbuffer: false
optionresult.all
propertyExample from the type tests: