JSDoc pris en charge
La liste ci-dessous indique les constructions actuellement prises en charge lors de l'utilisation d'annotations
JSDoc
pour fournir des informations de type dans des fichiers
JavaScript
.
Notez que les balises qui ne sont pas explicitement listées ci-dessous (telles que
@async
) ne sont pas encore prises en charge.
@type
@param
(ou @argou
@argument
)
@returns
(ou @return
)
@typedef
@callback
@template
@class
(ou @constructor
)
@this
@extends
(ou @augments
)
@enum
La signification est généralement la même, ou un sur-ensemble, de la signification de la balise donnée sur
usejsdoc.org
.
Le code ci-dessous décrit les différences et donne un exemple d'utilisation de chaque balise.
@type
Vous pouvez utiliser la balise
@type
et référencer un nom de type (primitive, définie dans une déclaration
TypeScript
ou dans une balise
JSDoc
@typedef
Vous pouvez utiliser n'importe quel type de typescript et la plupart des types
JSDoc
.
@type
peut spécifier un type d'union, par exemple, quelque chose peut être une chaî ne ou un booléen.
Notez que les parenthèses sont facultatives pour les types d'union.
Vous pouvez spécifier des types de tableaux en utilisant diverses syntaxes :
Vous pouvez également spécifier des types littéraux d'objet.
Par exemple, un objet avec les propriétés 'a' (chaî ne) et 'b' (nombre) utilise la syntaxe suivante :
Vous pouvez spécifier des objets de type carte et de type tableau à l'aide de signatures d'index de chaî ne et de nombre,
à l'aide de la syntaxe
JSDoc
standard ou de la syntaxe
Typescript
.
Les deux types précédents sont équivalents aux types
Typescript
{ [x: string]: number }
et
{ [x: number]: any }
.
Le compilateur comprend les deux syntaxes.
Vous pouvez spécifier les types de fonction à l'aide de la syntaxe
Typescript
ou
Closure
:
Ou vous pouvez simplement utiliser le Functiontype non spécifié :
D'autres types de fermeture fonctionnent également :
Les moulages
Typescript
emprunte la syntaxe de conversion de
Closure
.
Cela vous permet de convertir des types en d'autres types en ajoutant une @typebalise avant toute expression entre parenthèses.
Types d'importation
Vous pouvez également importer des déclarations à partir d'autres fichiers à l'aide de types d'importation.
Cette syntaxe est spécifique à
Typescript
et diffère de la norme
JSDoc
:
Les types d'importation peuvent également être utilisés dans les déclarations d'alias de type :
Les types d'importation peuvent être utilisés pour obtenir le type d'une valeur à partir d'un module si vous
ne connaissez pas le type ou s'il a un type de grande taille qui est ennuyeux à taper:
@param
et @returns
@param
utilise la même syntaxe de type que
@type
, mais ajoute un nom de paramètre.
Le paramètre peut également être déclaré facultatif en entourant le nom de crochets :
De même, pour le type de retour d'une fonction :
@typedef
, @callback
et @param
@typedef
peut être utilisé pour définir des types complexes.
Une syntaxe similaire fonctionne avec
@param
.
Vous pouvez utiliser l'une object ou l'autre ou Object sur la première ligne.
@param
permet une syntaxe similaire pour les spécifications de type ponctuelles.
Notez que les noms de propriété imbriqués doivent être précédés du nom du paramètre :
@callback
est similaire à
@typedef
, mais spécifie un type de fonction au lieu d'un type d'objet :
Bien entendu, chacun de ces types peut être déclaré à l'aide de la syntaxe
Typescript
sur une seule ligne
@typedef
:
@template
Vous pouvez déclarer des types génériques avec la balise
@template
:
Utilisez des virgules ou plusieurs balises pour déclarer plusieurs paramètres de type :
Vous pouvez également spécifier une contrainte de type avant le nom du paramètre de type.
Seul le premier paramètre de type dans une liste est contraint :
@constructor
Le compilateur induit des fonctions de constructeur basées sur les affectations
this-property
,
mais vous pouvez améliorer la vérification et les suggestions plus strictes si vous ajoutez une balise
@constructor
:
Avec
@constructor
,
this
est cochée dans la fonction constructeur
C
,
vous obtiendrez ainsi des suggestions pour la méthode
initialize
et une erreur si vous lui transmettez un nombre.
Vous obtiendrez également une erreur si vous appelez
C
au lieu de la construire.
Malheureusement, cela signifie que les fonctions de constructeur également appelables ne peuvent pas être utilisées
@constructor
.
@this
Le compilateur peut généralement déterminer le type de moment
this
où il doit travailler avec un certain contexte.
Sinon, vous pouvez spécifier explicitement le type de
this
avec
@this
:
@extends
Lorsque les classes
Javascript
étendent une classe de base générique, il n'y a nulle part où spécifier le paramètre type.
La balise
@extends
fournit une place pour ce paramètre de type :
Notez que
@extends
ne fonctionne qu'avec des classes.
Actuellement, il n'y a aucun moyen pour une fonction constructeur d'étendre une classe.
@enum
La balise
@enum
vous permet de créer un littéral d'objet dont les membres sont tous d'un type spécifié.
Contrairement à la plupart des littéraux d'objet en
Javascript
, il ne permet pas aux autres membres.
Notez que
@enum
est assez différent et beaucoup plus simple que celui de
Typescript enum
.
Cependant, contrairement aux énumérations de
Typescript
,
@enum
peut avoir n'importe quel type :
Plus d'exemples :
Modèles qui ne sont pas connus pour être pris en charge
Faire référence à des objets dans l'espace de valeur en tant que types ne fonctionne que si l'objet crée également un type, comme une fonction constructeur.
Postfix est égal à un type de propriété dans un type d'objet littéral ne spécifie pas une propriété facultative :
Les types nullables n'ont de signification que si
strictNullChecks
est activé :
Les types non nullables n'ont aucune signification et sont traités comme leur type d'origine :
Contrairement au système de types de
JSDoc
,
Typescript
vous permet uniquement de marquer les types comme contenant
null
ou non.
Il n'y a pas de non-possibilité explicite si
strictNullChecks
est activé, alors number n'est pas nullable.
Si elle est désactivée, alors number est nullable.