Closed
Description
Search Terms
type check
array
union
Suggestion
If we define a type like [null, string] | [number, null]
, we know that, if the first element is null
, the second element is string
, and if the second element is null
, the first element is number
. But, the type check can't understand it, what is less accurate than desired.
Use Cases/Example
When we creating a new function, we could want to return a value that is returned in success case, or an error if it failed. A simple way to do it is using an array, for example:
const createUser = (): [User, null] | [null, Error] => {
...
Then, this function can return [User, null]
or [null, Error]
. But, the type check can't work very well:
const [user, error] = createUser()
if (user === null) {
console.log(error.message) // type check mark a warning where,
// saying that "error" could be null, but it is impossible!
return
}
// type check say that "user" never will be null. It is ok.
or...
const [user, error] = createUser()
if (error !== null) {
console.log(error.message) // no warning
return
}
// type check say that "user" could be null, but it is impossible
Metadata
Metadata
Assignees
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
jack-williams commentedon Dec 12, 2018
I think this is a duplicate #27497 (and others). Narrowing does not work across destructuring like this.
macabeus commentedon Dec 12, 2018
@jack-williams @weswigham Does we have an issue or pull request which we can track the fix about this issue?
weswigham commentedon Dec 12, 2018
I think #12184 is the canonical one.
typescript-bot commentedon Dec 15, 2018
This issue has been marked as a 'Duplicate' and has seen no recent activity. It has been automatically closed for house-keeping purposes.