microsoft / microsoft/TypeScript
Allow inference of class generics when declaring an interface
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
Search Terms
interface, inference, extending class
Suggestion
I'd like to be able to strongly type an interface such that when it is used on a class that has a generic I can infer the type of that generic to then use in the declaration of the interface.
Use Cases
I want to use this within a library that exposes both an abstract class and an optional interface that developers can opt-in to use. The abstract class has one generic parameter, and in order to correctly type the interface without duplicate generic declaration I want to be able to infer the abstract class' generic type.
Currently the inheriting class declarations must duplicate their generic type declaration.
This issue is similar to https://github.com/microsoft/TypeScript/issues/26242 I think, but I don't see how the resolution of that issue will fix this one.
Examples
abstract class Base<T> {
// implementation omitted for brevity
}
// ⬇️this is the proposed new syntax ⬇️
interface Remap<T> extends Base<infer U> {
remap(input: U): T;
}
class Foo extends Base<string> implements Remap<number> {
public remap(input: string): number {
return input;
}
}
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
Aucun fichier source, test ou point d’entrée du compilateur n’est identifié dans l’issue. Commencez par lire la syntaxe TypeScript proposée et l’issue associée #26242, puis suivez la manière dont l’héritage générique et les déclarations d’interface sont actuellement vérifiés. Le travail sera considéré comme terminé lorsque l’équipe aura défini et implémenté le comportement d’inférence attendu, avec une couverture pour l’exemple présenté et ses cas limites.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100