microsoft / microsoft/TypeScript

Allow non-null assertion operator on destructuring

Open
#63,131 2 comments 0 reactions 0 assignees View on GitHub
Awaiting More Feedback Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
PR merge metrics
PR metrics pending

Description

### 🔍 Search Terms

destructuring non null assertion operator

### ✅ Viability Checklist

- [x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
- [x] This wouldn't change the runtime behavior of existing JavaScript code
- [x] This could be implemented without emitting different JS based on the types of the expressions
- [x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- [x] This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- [x] 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
```ts
const { veryVeryVeryLongPropertyName! } = obj;
```
So I had to do this
```ts
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?
```ts
// 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

Open the contributing guide

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.