microsoft / microsoft/TypeScript
Allow `interface extends object` syntax
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
🔍 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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza revisando la sintaxis propuesta interface extends object y el issue relacionado #60582 enlazado. No se mencionan archivos de implementación ni pruebas, así que sigue el recorrido de la herencia de interfaces relevante y del manejo de la asignabilidad antes de definir pruebas para la semántica indicada de asignación de primitivas.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100