microsoft / microsoft/TypeScript
Destructuring a possibly `undefined` object not caught, throws an error at runtime
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
🔎 Search Terms
destructuring, Cannot destructure as it is undefined, optional chaining destructuring
🕗 Version & Regression Information
- This changed between versions ______ and _______
- This changed in commit or PR _______
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
- I was unable to test this on prior versions because _______
⏯ Playground Link
💻 Code
const input: {
a?: { b?: { c: string } }
} = { a: undefined }
const { ...b } = input.a?.b
🙁 Actual behavior
No error reported by TypeScript.
🙂 Expected behavior
TypeScript should have an indicative error, since this expression might result in undefined, which cannot be destructured.
Similar to this:
Rest types may only be created from object types.(2700)
Additional information about the issue
The error in the JavaScript being ran is:
Uncaught TypeError: Cannot destructure '(intermediate value)' as it is undefined.
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 with the TypeScript 5.6.2 Playground link and the destructuring example involving input.a?.b. Trace how the checker handles a possibly undefined object in an object-rest destructuring expression, then verify that the completed behavior reports an indicative diagnostic instead of permitting code that throws at runtime.
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
- Clearly specified
- Newbie friendliness
- 45/100