microsoft / microsoft/TypeScript
`Object(x) === x` fails to narrow to `object`
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.4k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
🔎 Search Terms
narrow object
🕗 Version & Regression Information
I only tested this on latest, but I think it's always worked this way.
⏯ Playground Link
💻 Code
var err: unknown;
if (Object(err) === err) {
err.toString; // `err` type is unknown, should be `object`
}
🙁 Actual behavior
Errors because it thinks err is unknown
🙂 Expected behavior
Does not error because it knows err is object
Additional information about the issue
Object(x) === x is the most idiomatic and reliable way to test if something is an object, since it avoids hardcoding typeof checks. It'd be great if it was narrowed here.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the example from the linked TypeScript Playground, then trace the type-checking path for the Object(err) === err comparison and object narrowing. Done means the shown err.toString access no longer errors, with a regression test covering the behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100