microsoft / microsoft/TypeScript
Allow setters to return
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
Search Terms
Setters cannot return a value
decorators
Suggestion
By default JavaScript does nothing with the return value of a setter, but it isn't an error.
Allow setters to return as the default behaviour and add flag to turn errors on.
Use Cases
- Decorators that override the setter and use the original setters return value.
- Methods that directly call the setter function and expect a return.
Examples
A live example would be @computed from ember-decorators, which matches the old behaviour from ember.
Code example using legacy decorators (same would be possible with stage 2 decorators):
function saved (target: {}, key: string | symbol, descriptor: PropertyDescriptor) {
const savedStore = new WeakMap();
const oldSet = descriptor.set;
if (!oldSet) {
throw new Error('Must be used on setter only');
}
const oldGet = descriptor.get;
return {
...descriptor,
get () {
let response = savedStore.get(this);
if (!response && oldGet) {
response = oldGet.call(this);
}
return response;
},
set (value: any) {
const result = oldSet.call(this, value);
savedStore.set(this, result);
}
};
}
class Foo {
@saved
get square () {
// default value of 1 if none is saved
return 1;
}
set square (value: number) {
return value * value;
}
}
Checklist
My suggestion meets these guidelines:
- 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. new expression-level syntax)
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 mit der Überprüfung des im Issue beschriebenen Setter- und Decorator-Verhaltens, einschließlich des Beispiels für den Legacy-Decorator und seiner Verwendung von PropertyDescriptor.set. Vergleiche das angeforderte standardmäßige Rückgabeverhalten mit dem vorgeschlagenen Opt-in-Fehler-Flag und dem bestehenden JavaScript-Verhalten. Als abgeschlossen gilt die Aufgabe, wenn das Sprachverhalten und die Semantik des Flags spezifiziert und durch geeignete Compiler-Tests abgedeckt sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, 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