microsoft / microsoft/TypeScript
Suggestion: readonly method
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
Problem:
A method (function written with the ES6 method syntax) can currently be replaced with another function by a simple assignment.
As an example consider the following snippet of code:
class Person {
constructor(...) {...}
displayName (): string {...}
}
const x: Person = new Person(...)
x.displayName = function(this: Person): string {...} // Assignment
Because the readonly modifier is not usable for methods, this is not possible to prevent this kind of assignments.
Proposal:
A method is always readonly.
The following codes are identical:
class Person {
displayName (): string {...}
}
class Person {
readonly displayName: (this: Person) => string = function () {...}
}
Compatibility:
This is a breaking change. However, method syntax is recent and mostly used in classes. Codes which assign a function to a method are certainly rare.
Temporary workaround:
Do not use method syntax in your classes and interfaces. Note hat this leads to very verbose codes.
If you use an interface, the verbosity is acceptable. However you get also strict variance.
interface PersonI {
readonly displayName: (this: Person) => string
}
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Non sono indicati né un file sorgente né un test. Inizia confrontando gli esempi di metodi di classe e proprietà readonly nell’issue, quindi segui il punto in cui TypeScript verifica le assegnazioni ai metodi. Il lavoro sarà completato quando sarà stato deciso il comportamento di readonly-method, sarà stata gestita la compatibilità con la breaking change proposta e saranno presenti test che coprano il rifiuto delle assegnazioni.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, typescript
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100