microsoft / microsoft/TypeScript
Convert named tuple into object literal type.
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
Search Terms
refactor
Suggestion
Provide a refactor that convert named tuple into object literal type.
Use Cases
Now we have named tuple.
It's common to write a tuple to pass multiple value.
As time goes on, you may add many other fields into tuple.
You cannot take a subsequence in the middle or the end of the tuple.
If we could convert that into an object, That would be useful.
Examples
type Tuple = [number, number]
function aggregate(items: number[]): Tuple {
// ...
return [min, max]
}
const [ min, max ] = aggregate(items)
Growth to
type Tuple = [number, number, number, number, number, number]
function aggregate(items: number[]): Tuple {
// ...
return [min, max, avg, mid, first, last]
}
const [ min, max, avg, mid, first, last ] = aggregate(items)
If we want first and last only
const [ , , , , first, last ] = aggregate(items) // too many '.'
const result = aggregate(items);
const first = result[4] // magic number
const last = result[5] // magic number
If we have the refactor
// add names into tuple
type Tuple = [min: number, max: number, avg: number, mid: number, first: number, last: number]
// apply refactor
type Tuple = {min: number, max: number, avg: number, mid: number, first: number, last: number}
function aggregate(items: number[]): Tuple {
// ...
return {min, max, avg, mid, first, last}
}
const { first, last } = aggregate(items)
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, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par examiner l’infrastructure de refactoring du TypeScript language-service et les tests de refactoring existants, puis comparez leurs conventions avec les exemples de named tuple de cette issue. C’est terminé lorsqu’un refactoring peut convertir un type named tuple en un type object literal équivalent et prend en charge l’utilisation basée sur les propriétés décrite, avec des tests couvrant la transformation.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- developer-experience
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 32/100