microsoft / microsoft/TypeScript
Allow non-null assertion operator on destructuring
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
🔍 Search Terms
destructuring non null assertion operator
✅ Viability Checklist
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ Suggestion
Allow the non-null assertion post-fix operator to be used in destructuring assignments
📃 Motivating Example
I was destructuring an object with a long name, but I couldn't do so because I also needed to assert it wasn't null, and this is not currently allowed
const { veryVeryVeryLongPropertyName! } = obj;
So I had to do this
const veryVeryVeryLongPropertyName = obj.veryVeryVeryLongPropertyName!;
💻 Use Cases
What do you want to use this for?
To avoid having to specify the name twice
What workarounds are you using in the meantime?
// Workaround: Short name
// Shortcoming: Not what I actually wanted to do
const temp = obj.veryVeryVeryLongPropertyName!;
// Workaround: Default `never` value
// Shortcoming: Verbose
const { veryVeryVeryLongPropertyName = undefined! } = obj;
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 issue's destructuring examples and the stated constraint that emitted JavaScript must not change. Review the compiler's handling of non-null assertions and destructuring assignments, then establish the required design and tests; done means the proposed syntax is accepted without changing runtime output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100