microsoft / microsoft/TypeScript
New Feature Requesting for `const` Parameter
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
I have a small new feature to request. Let say we have this piece of code:
function setButton(button: Button | undefined) {
if (button) {
button.onclick = () => {
// tsc complains button might be undefined(well done!),
// because it might be set to undefined later on,
// as you can see below `button = undefined;`.
button.setAttribute('disabled', 'true'); //error
}
}
// some other code goes here...
// and eventually, button is set to undefined.
button = undefined;
}
Fortunately, there is a way to fix this:
function setButton(button: Button | undefined) {
const constButton = button;
if (constButton) {
constButton.onclick = () => {
// now tsc is satisfied.
constButton.setAttribute('disabled', 'true');
}
}
// impossible to assign to a const variable.
// constButton = undefined;
}
But can we twist the code a little bit, which is what I asking for? Something like this:
function setButton(const button: Button | undefined) {
if (button) {
button.onclick = () => {
button.setAttribute('disabled', 'true');
}
}
}
So you can see there really are some cases a const parameter might come to handy. Thank you.
P.S. Just for demonstrating the point, here's a full demo:
class Button {
onclick?: () => void;
performClick() {
if (this.onclick) this.onclick();
}
setAttribute(key: string, value: string) {
//set attribute to this button
}
}
function setButton(button: Button | undefined) {
if (button) {
button.onclick = () => {
button.setAttribute('disabled', 'true');
}
}
button = undefined;
}
const button = new Button();
setButton(button);
button.performClick();
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 reproduciendo los ejemplos de TypeScript del issue y revisando cómo las declaraciones de parámetros y el estrechamiento mediante el flujo de control gestionan las reasignaciones. Define la semántica y la sintaxis aceptadas para un parámetro const y, después, verifica que el ejemplo de callback pase el type-check, mientras que una reasignación sea rechazada.
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
- 25/100