microsoft / microsoft/TypeScript

Not possible to have optional object property compatible with both Closure Compiler and Intellisense

Ouverte
#30,522 1 commentaire 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Needs Proposal Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

  • VSCode Version: 1.32.3 x64
  • OS Version: Ubuntu 18.04

Steps to Reproduce:

  1. Enable "checkJs": true in jsconfig.json.
  2. Create a Javascript file:
class A {

  /**
   * @param {{field: string|undefined}} obj 
   */
  constructor(obj) {
    this.obj = obj;
  }
}

let a = new A({});

Results in this error:
image

Adding error text here for duplicate detection:
Argument of type '{}' is not assignable to parameter of type '{ field: string; }'.
Property 'field' is missing in type '{}' but required in type '{ field: string; }' .ts(2345)

Does this issue occur when all extensions are disabled?: Yes

Expected behaviour:
Some way to mark object properties as optional compatible both with Closure Compiler and VsCode intellisense. Either through @typedef, through structural interfaces with @record, direct @param notation using string|undefined, or something similar.

This notation works fine today, but it is not recognized by Closure Compiler. It is debatable whether this is an issue with Intellisense or lacking support from Closure Compiler.

class A {

  /**
   * @param {AParam} obj 
   */
  constructor(obj) {
    this.obj = obj;
  }
}

/** @typedef {{field?: string|undefined}} */
var AParam;
let a = new A({});

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 reproduire le problème dans jsconfig.json en utilisant checkJs et les formes JSDoc @param et @typedef présentées dans le rapport. Comparez la manière dont TypeScript gère la notation des propriétés facultatives avec l’exigence de compatibilité indiquée pour Closure Compiler. Le travail est considéré comme terminé lorsqu’une notation prise en charge permet d’utiliser new A({}) sans l’erreur signalée de propriété manquante, tout en restant compatible avec Closure Compiler.

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

Évaluation

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

Recevez les nouvelles issues par e-mail

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