microsoft / microsoft/TypeScript
No way to type an object with null prototype
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
Currently the base type of all objects in TS seems to be `{}`, which looks like an empty type but actually has members inherited from the Object object. This leaves no way to express a type with null prototype.
``` javascript
var foo: ??? = Object.create(null);
foo.toString(); // Want a compile error here
```
I did accidentally discover that it's possible to type a variable as void:
``` javascript
var foo: void = Object.create(null);
```
This appears to suppress intellisense for members in VS and the playground, and it is assignable to `any` (`Object.keys(foo)` compiles), so it would seem to be what I'm looking for. However this still lets `foo.toString()` compile somehow - I imagine the void type is getting elevated to Object automatically.
Edit: [Ryan's workaround](https://github.com/Microsoft/TypeScript/issues/1108#issuecomment-62406685) to subtype Object and override all its members to void prevents those properties from being called as functions, but as he points out, that doesn't prevent them from being accessed.
``` javascript
var bar = foo.toString; // Want a compiler error here too. Won't get one with Ryan's workaround.
```
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
Reproduce los ejemplos de Object.create(null) en el TypeScript playground y, después, rastrea cómo se modelan {}, void y los miembros de Object. Se considera completado cuando un tipo compatible puede representar un objeto con prototipo null y rechaza ambos ejemplos de acceso a miembros. El issue no indica ningún archivo ni prueba objetivo.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, 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
- 25/100