microsoft / microsoft/TypeScript
New Feature Requesting for `const` Parameter
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
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();
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, die TypeScript-Beispiele im Issue zu reproduzieren und zu überprüfen, wie Parameterdeklarationen und die Control-Flow-Narrowing-Analyse Neuzuweisungen behandeln. Definiere die akzeptierte Semantik und Syntax für einen const-Parameter und verifiziere anschließend, dass das Callback-Beispiel einen Type-Check besteht, während eine Neuzuweisung abgelehnt wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100