microsoft / microsoft/TypeScript
...args should not be readonly within function body
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
Bug Report
🔎 Search Terms
readonly parameter inferred tuple array args variadic
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 Code
declare function callFn<T extends readonly any[]>(args: T, fn: (...args: T) => void): void;
declare const input: readonly string[];
callFn(input, (...args) => {
args; // readonly string[] ?
})
declare function callFnNonGeneric(args: readonly string[], fn: (...args: readonly string[]) => void): void;
callFnNonGeneric(input, (...args) => {
args; // readonly string[] ?
})
🙁 Actual behavior
...args is readonly.
🙂 Expected behavior
...args is not readonly.
When this function is called, the input will be a brand new array which can be modified without affecting the caller:
> const fn = (...args) => { args[0] = "oops" }
undefined
> const arr = ["some", "values"]
undefined
> fn(...arr)
undefined
> arr
[ 'some', 'values' ]
Split out of https://github.com/microsoft/TypeScript/pull/53258#issuecomment-1470970487
The "fix" here is to strip readonly from variadic args (at the top level). This also means the fix in #53258 can be reverted (as the real fix can be more general).
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 dem verlinkten Playground-Beispiel, um zu reproduzieren, wie readonly-Argumente variabler Länge inferiert werden, und lies dann die Diskussion in PR #53258 über den zugehörigen Fix. Bestätige, dass Restparameter im Funktionskörper veränderbar sind, während das readonly-Array des Aufrufers erhalten bleibt, und überprüfe das erwartete Verhalten anhand der Beispiele in diesem Issue.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100