Skip to content

Add quick fix support for all valid strings for computed propertiesΒ #46402

Closed
@TrevorSayre

Description

@TrevorSayre

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.

image

image

Such names should be usable:

image

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).

image

image

This issue was inspired by this tweet:
https://twitter.com/majidrazvi/status/1449493443743391746

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: Quick FixesEditor-provided fixes, often called code actions.Effort: CasualGood issue if you're already used to contributing to the codebase. Harder than "good first issue".Help WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions