Description
Suggestion
Add a quick fix for TypeScript computed properties to "Add missing properties" that supports all valid strings.
π Search Terms
add missing properties
declare missing properties
implement all members
β Viability Checklist
My suggestion meets these guidelines:
- 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 feature would agree with the rest of TypeScript's Design Goals.
β Suggestion
type Letters = 'a' | 'b' | 'c' | 'd' | 'e';
type Numbers = 1 | 2 | 3;
type Chars = '$' | '_';
type Names = `${Letters}${Uppercase<Letters>}${Numbers}${Chars}`;
// Quick fix available
// so computed properties, transforms, and long lists work
const names: { [K in Names]: K } = {};
type Letters = 'a' | 'b' | 'c' | 'd' | 'e';
type Numbers = 1 | 2 | 3;
type Chars = '@' | '!'; // Difference is only this line
type Names = `${Letters}${Uppercase<Letters>}${Numbers}${Chars}`;
// Quick fix not available
const names: { [K in Names]: K } = {};
The last example works in WebStorm via "implement all members" and would be a welcome addition to VSCode. The quick fix for #28491 was implemented via #44576 and solved some use cases, but not this one.
The error output does already suggest all the missing properties. It seems like the data is available to execute a quick fix.
Such names should be usable:
Additionally, when the quick fix does work, it only adds the properties and sets values as undefined
even when the value is known (as in the above examples).
This issue was inspired by this tweet:
https://twitter.com/majidrazvi/status/1449493443743391746