88 votes

Tslint - type déduit trivialement - Pourquoi est-ce une mauvaise pratique d'inclure le type ici?

Dans VSCode, linter, tslint, se plaint lorsque j'ajoute le code suivant, avec le type:

 serverId: number = 10;
 

Et donne le message suivant:

[tslint] Numéro de type déduit trivialement à partir d'un littéral numérique, suppression de l'annotation de type (no-inferrable-types)

Lorsque je supprime le type 'numéro', le message disparaît.

Pourquoi est-ce une mauvaise pratique d'inclure les informations de type ici?

1 votes

Vous dites "plus verbeux" comme si c'était toujours une mauvaise chose, alors que parfois, plus c'est verbeux, plus c'est clair.

1 votes

@EricBrown-Cal plus de verbe est plus clair quand il serait ambigu sans cela. L'ajout de code qui n'apporte aucune information supplémentaire est, par définition, un parasite. const thisIsAVariableContainingTheNumericIdOfTheServer: numberNotBooleanOrStringOrObjectOrArray = 10

87voto

estus Points 5252

Ce n'est pas une mauvaise pratique, mais serverId: number = 10 est redondant, car number est déduit lorsqu'un bien est attribué. C'est ce que TSLint no-inferrable-types met en garde contre :

Les types explicites, lorsqu'ils peuvent être facilement déduits par le compilateur, rendent le code plus verbeux.

Sauf s'il y a une chance que serverId peut être initialement indéfinie mais être définie ultérieurement (par exemple dans constructor ), number peut être omis en toute sécurité.

Cette approche fonctionne le mieux avec noImplicitAny car de cette façon, il n'y a pas de risque qu'un type soit omis par erreur parce qu'il n'a pas été déduit.

43voto

Alex Spera Points 161

Comme nous l'avons mentionné plus haut, il s'agit d'une redondance technique qui peut être considérée comme un encombrement. Personnellement, je ne suis pas de cet avis et je préfère avoir à la fois le type et la valeur pour toute une série de raisons spécifiques et mineures liées au flux de travail, et je ne considère pas qu'il s'agisse d'un niveau d'encombrement justifiant une règle. Si vous souhaitez le désactiver, voici comment procéder.

  • ouvrir tslint.json
  • trouver l'attribut "no-inferrable-types
  • ajouter ignore-properties à son tableau

documents pertinents sur tslint https://palantir.github.io/tslint/rules/no-inferrable-types/

26voto

Pardeep Jain Points 4603

Cette erreur est due à votre configuration dans tslint.json fichier.

Soit vous initialisez votre variable comme

serverId = 10;

o

serverId: number;

ou simplement définir votre configuration pour le no-inferrable-types dans votre fichier tslint.json en tant que

no-inferrable-types: false

4voto

Sulthan Points 23360

Il est inutile, il n'apporte aucune information nouvelle. Il s'agit essentiellement d'un commentaire disant "10 est un chiffre".

3 votes

Dans ce cas, vous avez raison.... Cependant, il peut y avoir une ambiguïté avec les chaînes de caractères et les booléens... (il convient également de respecter une bonne dénomination des variables...)

2voto

Akshay Kumar Points 47

C'est peut-être bizarre de venir voir ça maintenant, mais j'obtenais la même erreur et je ne trouvais pas l'attribut "no-inferrable-types" dans le fichier tslint.json de mon application angulaire. Je ne sais pas pourquoi il ne l'a pas généré en premier lieu, mais j'ai dû l'insérer ici

"rules": {
    **"no-inferrable-types": false,**
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],

Et là, ça a marché comme sur des roulettes !

P.S. C'est pour quelqu'un qui pourrait être confronté au même problème que moi, ou je peux me tromper parce que personne dans aucune des solutions n'a mentionné que cela doit être ajouté de notre côté dans le fichier json.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X