Repository navigation
Open
Labels
Experience EnhancementNoncontroversial enhancementsNoncontroversial enhancementsRescheduledThis issue was previously scheduled to an earlier milestoneThis issue was previously scheduled to an earlier milestoneSuggestionAn idea for TypeScriptAn idea for TypeScript
Milestone
Description
π Search Terms
named object property tuple type lookup
β 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
Developers sometimes accidentally use [] to declare a type instead of {}. Later, when they try to access a property by string name, the error message doesn't indicate that it's a [] tuple instead of {} object. Can we get a specific error message for that example?
π Motivating Example
The following Label type alias seems to describe a reasonable tuple at first. But later on we see that the developer might have meant to describe an object type.
type Label = [
text: string;
];
declare const label: Label;
label.text;
// Property 'text' does not exist on type 'Label'.How about a specialized diagnostic indicating 'Label' is a tuple?
Property 'text' does not exist on type 'Label'.
'Label' is a tuple type with numeric keys, not an object type with string keys.
...bikeshedding needed on that message π€
π» Use Cases
- When a developer meant to write an object type but used a tuple instead
- When a developer misread a tuple type as an object type
- When a developer is new to tuples and/or types, and confused the two's syntaxes
Example real-world developer pain point (posted with permission): https://twitter.com/yagiznizipli/status/1736762337716039967
Reacted by Rob Palmer, Bruce Pascoe and Haroen Viaene
Metadata
Metadata
Labels
Experience EnhancementNoncontroversial enhancementsNoncontroversial enhancementsRescheduledThis issue was previously scheduled to an earlier milestoneThis issue was previously scheduled to an earlier milestoneSuggestionAn idea for TypeScriptAn idea for TypeScript
Activity
RyanCavanaugh commentedon Dec 18, 2023
This seems like a good idea. In theory I think we can go further and offer the index in the error message, if it exists (maybe we should only do it in that case?)
fatcerberus commentedon Dec 19, 2023
So that would be something on the order of
Downside: This suggestion might be misleading, if the actual mistake the developer made was using
[]instead of{}in the definition, as hinted in the Use Cases section of the OP.DanielRosenwasser commentedon Mar 21, 2024
Suggested error messages:
Related info on the label itself: