microsoft / microsoft/TypeScript
Specialized error message when asking for a named object property on a tuple?
@PranavSenthilnathan is already working on this.
Since Mar 21, 2024.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.4k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
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
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.
Assessment
This issue has not been assessed yet.