type callbacks

Ouverte
#29,755 3 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
20/100
Type d'issue
Fonctionnalité
Clarté
À clarifier
Activité
À l'abandon
Stack technique
typescript
Domaine
compilers

Piste de recherche

Commencez par lire les exemples de type-callback proposés dans cette issue ainsi que l’issue liée #23188, qui traite des types intermédiaires. L’issue ne nomme aucun fichier d’implémentation ni test et demande une discussion plutôt qu’une modification définie. Un travail terminé nécessiterait une proposition approuvée pour exprimer et appliquer les type-callbacks.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Needs Proposal Suggestion

search: https://www.google.com/search?q=type+functions+site%3Ahttps%3A%2F%2Fgithub.com%2FMicrosoft%2FTypeScript

The more I work with advance types the more apparent the following problems become:

No intermediate types

At the current stage the advanced types are represented via expressions. Quite often there is a need to reuse exactly the same part of such expression in more than one place. Currently there is no way to capture a part of it and reuse it, consider:

type A<X> = { x: B<X>, y: B<X> }

here I wish I could save B<X> into a local type C somehow to be able to write

// speculative syntax:
type A<X> = <
    type C = B<X>;
    { x: C, y: C };
>;

per @RyanCavanaugh intermediate types are covered by https://github.com/Microsoft/TypeScript/issues/23188

No way to specify a type callback

Currently type parameters are the only way to define a parametric type. There is no way to define a type based on a type callback:

interface Z { x: string; y: number; }
// speculative syntax:
type A<T, F: X =>...,  T> =  { [P in keyof T]: F<T[P]>; } // <-- wish could do this
type B = A<Z, X => X extends string ? true : false>;  // { x: true; y: false; }
type C = A<Z, X => { get: () => X }>;  // { x: { get: () => string; }; y: { get: () => number; }; }

I am not sure what a proposal would be, but these problems are definitely worth a discussion

Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/TypeScript

Toutes les issues de microsoft/TypeScript

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.