microsoft / microsoft/TypeScript
Not possible to have optional object property compatible with both Closure Compiler and Intellisense
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
- VSCode Version: 1.32.3 x64
- OS Version: Ubuntu 18.04
Steps to Reproduce:
- Enable "checkJs": true in jsconfig.json.
- Create a Javascript file:
class A {
/**
* @param {{field: string|undefined}} obj
*/
constructor(obj) {
this.obj = obj;
}
}
let a = new A({});
Results in this error:

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
- 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 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