microsoft / microsoft/TypeScript

Provide a `this` type for `get`/`set` methods in `Reflect.defineProperty` options

Ouverte
#33,542 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Experience Enhancement Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

Code

var A: {a?: number, b: number} = {b:2}
Reflect.defineProperty(A, 'a', {
  // set(this: any, value: any) { // to fix
  set(value: any) {
    console.log(this.b); // Property 'b' does not exist on type 'PropertyDescriptor'.
  },
  enumerable: true,
  configurable: true
});
A.a = 1;
// expect the context of setter is A

Expected behavior:

expect the context of the setter is A

Actual behavior:

Property 'b' does not exist on type 'PropertyDescriptor'.

Playground Link:

https://www.typescriptlang.org/play/index.html?strictPropertyInitialization=false&alwaysStrict=false&experimentalDecorators=true&emitDecoratorMetadata=true#code/LAKAbghgTgBAggLhgbwgfiQOwK4FsBGAplADQz5Z5FQC+MAvChQEw2gBKhAZgDaEDGAFwB0AE24BLTIQAKUAPYAHYoICeACjhkA5BG1lkoGDADOhQesg9shJBEyqAlCiPGY-eZhPy+wnvIBzdUEACwkTYXxHAG4YAHo4mDklFVUYbXxtGFF5QhMYTHlBGEIAD3Dizxg1ZXTk5Sg1ABE8-igJRUF5KG1hVxoSV0IcXGIIfD4kQSgbQZBjD0wuCQDsKHHJ6pnCUBoY0DhhCAYYAEZo0ASS0uUhapDCd09BMsquU3MX2HD4IA

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par l’exemple TypeScript Playground lié et comparez le this inféré du setter avec le type de récepteur attendu. Suivez les options de Reflect.defineProperty et les typages de PropertyDescriptor, puis ajoutez une couverture pour l’exemple dans une zone de tests existante appropriée. C’est terminé lorsque le contexte du setter est typé comme l’objet cible sans l’erreur signalée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.