microsoft / microsoft/TypeScript
Pedantic: deny mutable type generalization
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
Search Terms
type generalization
type expanding
Suggestion
Currently we have a vulnerability in type safety of mutable variables. You can generalize the type of some variable and change its value by passing there something not compatible with the old type. Examples:
const a: Array<number> = [1, 2]
const b: Array<number | string> = a
b.push('a is not array of numbers anymore')
const a = { data: 0 }
function b (param: { data: string | number }) {
param.data = 'a is broken now'
}
b(a)
So I suggest adding a new compiler option under 'pedantic' label which will deny such type conversions:
const a: Array<number> = [1, 2]
// Error: type 'Array<number>' is not assignable to 'Array<number | string>'
const b: Array<number | string> = a
const a: Array<number> = [1, 2]
// OK: 'ReadonlyArray' won't let us mutate the state of 'a'
const b: ReadonlyArray<number | string> = a
const a = { foo: 0, bar: 'string' }
function b (param: { readonly foo: number | string, bar: string }) {
param.bar = String(param.foo)
}
// OK
// property 'foo: number' is assignable to 'readonly foo: number | string'
// property 'bar: string' is assignable to 'bar: string'
b(a)
function c (param: { readonly foo: number | string, bar: number | string }) {
param.bar = String(param.foo)
}
// Error: property 'bar: string' is not assignable to 'bar: number | string'
c(a)
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
Das Issue nennt keine Datei und keinen Test-Einstiegspunkt. Beginne damit zu überprüfen, wie Compileroptionen und Zuweisbarkeit behandelt werden, und vergleiche dann die Beispiele mit veränderlichen Arrays und Objekten mit den readonly-Fällen. Erledigt ist die Aufgabe, wenn eine pedantische Option die unsicheren veränderlichen Verallgemeinerungen ablehnt und gleichzeitig die beschriebenen readonly-Konvertierungen zulässt.
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
- 30/100