microsoft / microsoft/TypeScript
Unsafe type-incompatible assignments should not be allowed
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
TypeScript Version: 2.1.6
Code
interface StringOnly {
val: string;
}
interface StringOrNull {
val: string | null;
}
const obj: StringOnly = { val: "str" };
// should not be allowed
const nullable: StringOrNull = obj;
nullable.val = null;
// obj is now in a bad state
Expected behavior:
The sample should not compile, as it's not safe. Type casts/assertions should be required to override type incompatibility errors here. (Or, of course, cloning the object itself const nullable: StringOrNull = { ...str };).
For comparison, Flow does not allow the sample code.
Actual behavior:
The sample compiles and further accesses of str.val will likely result in exceptions.
EDIT: Removed all references to readonly, as discussion of that modifier is overshadowing the issue.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par compiler l’exemple TypeScript fourni et suivre le point d’entrée du type-checker qui accepte l’affectation de StringOnly à StringOrNull. Comparez les règles d’assignabilité qui en résultent avec la mutation non sûre indiquée, et tenez compte de la discussion existante avant de définir quel comportement et quelle couverture de régression seraient considérés comme terminés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100