microsoft / microsoft/TypeScript
Allow `interface extends object` syntax
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
🔍 Search Terms
interface extends object
✅ 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
I propose to allow the following syntax:
interface MyInterface extends object {}
This would have identical semantics to the following (currently legal) syntax:
type _object = object
interface MyInterface extends _object {}
Details:
- No primitive may be assigned to such an interface or an intersection containing such an interface
- This requirement is inherited by any extending interfaces
I'm requesting this feature mainly because it was the only pain-point mentioned in this related issue. To quote:
No one is going to turn on this behavior if it means every time they write
interface Person { name: string }they actually need to write
interface _PersonFields { name: string; } type Person = object & _PersonFields;
Regardless of the outcome of that other issue however, it would be nice to be able to extends object without going through that kind of hassle.
📃 Motivating Example
A small usability improvement to allow interfaces to more easily declare that primitives cannot be assigned to them.
💻 Use Cases
- What do you want to use this for? To avoid non-idiomatic verbosity
- What shortcomings exist with current approaches? Non-idiomatic verbosity
- What workarounds are you using in the meantime? Non-idiomatic verbosity
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 la syntaxe proposée interface extends object et l’issue associée #60582. Aucun fichier d’implémentation ni test n’étant indiqué, suivez le traitement pertinent de l’héritage des interfaces et de l’assignabilité avant de définir des tests pour la sémantique d’affectation des valeurs primitives indiquée.
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
- 35/100