microsoft / microsoft/TypeScript
Allow declaring properties inside class constructors
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
It's a little clunky setting up properties in classes right now.
Here's what I have to do at the moment to set a property value in the constructor:
class Animal {
public interruptedSound: string;
constructor(public sound: string) {
this.interruptedSound = sound.substring(0, 3);
}
}
let dog = new Animal("woof");
console.log(dog.sound); // woof
console.log(dog.interruptedSound); // woo
Notice that interruptedSound's setup is split over two lines, and I have to declare it as a string even though it could be inferred from the fact that sound.substring returns a string.
What I'd like to be able to do:
class Animal {
constructor(public sound: string) {
this.interruptedSound = sound.substring(0, 3); // now a detectable property of type string
}
}
let dog = new Animal("woof");
console.log(dog.sound); // woof
console.log(dog.interruptedSound); // woo
This would avoid having to declare all properties at the top before being able to use them in constructors, saving a lot of boilerplate on complex classes. F# already does something similar to make setting up types much quicker and simpler. There wouldn't be any JavaScript compatibility issues, because JavaScript already works this way.
In cases where the property is declared separately, give precedence to the declaration.
The private, public or readonly keywords could even be used before the assignment to modify the property, e.g.
class Animal {
constructor(public sound: string) {
private readonly this.interruptedSound = sound.substring(0, 3);
}
changeSounds() {
this.sound = "meow";
this.interruptedSound = "meo"; // error, interruptedSound is readonly
}
}
let dog = new Animal("woof");
console.log(dog.sound); // woof
console.log(dog.interruptedSound); // error, interruptedSound is private
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
El issue no menciona archivos, pruebas ni puntos de entrada del compilador. Comienza revisando los ejemplos propuestos de asignación en el constructor y el manejo existente de las propiedades de clase y las propiedades de parámetros del constructor; se considerará terminado cuando se admita la sintaxis solicitada con tipos inferidos y el comportamiento de declaración, visibilidad y readonly indicado.
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
- 30/100