Tslint: no-unsafe-any : ne devrait pas se plaindre des appels de fonction dont les paramètres utilisent

Créé le 10 mai 2017  ·  24Commentaires  ·  Source: palantir/tslint

Rapport d'erreur

  • __TSLint version__ : 5.2.0
  • __TypeScript version__ : 2.2.2
  • __Exécution de TSLint via__ : CLI

Code TypeScript en train d'être lint

// part of angular
export declare function inject(tokens: any[], fn: Function): () => any;

// my test
it('should return a new shift', inject([ShiftService, MockBackend], (service: ShiftService, backend: MockBackend) => {

avec la configuration tslint.json :

{
  "no-unsafe-any": true,
}

Comportement réel

Unsafe use of expression of type 'any'.

Comportement attendu

Ne devrait pas se plaindre de l'appel de la fonction inject .

Commentaire le plus utile

J'obtiens également des erreurs superflues lors de l'utilisation de cette règle en combinaison avec des variables non inutilisées. Si je désactive cette règle, les erreurs pour no-unsafe-any disparaissent.

Je vois également des erreurs superflues avec aucun objet inféré lorsqu'il est utilisé en combinaison avec des variables non inutilisées

Tous les 24 commentaires

Pourriez-vous fournir un exemple reproductible ?

Voici un repo de repro

https://github.com/CSchulz/tslint-no-unsafe-any-showcase

Je ne suis pas sûr des importations dans _test.ts_ qui sont également violées avec un safe any, mais l'utilisation des méthodes dans _app.component.spec.ts_ devrait être correcte.

ERROR: src/app/app.component.spec.ts[24, 12]: Unsafe use of expression of type 'any'.
ERROR: src/app/app.component.spec.ts[31, 12]: Unsafe use of expression of type 'any'.
ERROR: src/app/app.component.spec.ts[31, 12]: Unsafe use of expression of type 'any'.
ERROR: src/app/app.component.spec.ts[31, 12]: Unsafe use of expression of type 'any'.
ERROR: src/app/app.component.spec.ts[38, 12]: Unsafe use of expression of type 'any'.
ERROR: src/app/app.component.spec.ts[38, 12]: Unsafe use of expression of type 'any'.
ERROR: src/app/app.component.spec.ts[38, 12]: Unsafe use of expression of type 'any'.

J'ai cloné votre référentiel et j'ai essayé de reproduire les échecs de charpie.

En ignorant test.ts j'ai obtenu ce qui suit :

Ce sont des échecs attendus.

Peut-être qu'il manque quelque chose dans votre dépôt de repro ?

J'ai le sentiment qu'il y a quelques incompatibilités entre les différentes extensions pour tslint.

Je l'ai testé à nouveau en ce moment et j'ai eu les mêmes violations que @ajafff. Je vais essayer de télécharger un fichier d'emballage pour montrer mon arbre de dépendance.

Semble être une collision avec aucune variable inutilisée. Vous devez le reproduire avec les règles suivantes :

    "no-unsafe-any": true,
    "no-unused-variable": [
      true,
      "check-parameters",
      {
        "ignore-pattern": "^_"
      }
    ]

Peut-être #2649.

Oui pourrait être possible, je n'étais pas sûr.

Je me demande toujours comment j'ai eu cette erreur avec le jeu de règles initial.

Je peux éviter le problème avec l'ensemble de règles initial après avoir réinstallé les dépendances à partir de zéro. Je ne peux pas dire quelles dépendances créent des problèmes les unes avec les autres.

L'utilisation de @Injectable() crée un faux positif, j'ai mis à jour le référentiel.

Injectable() est déclaré de type any . @angular/core/src/di/metadata.d.ts définit export declare const Injectable: InjectableDecorator; et InjectableDecorator déclare (): any; .
Ou vous pouvez simplement survoler le @Injectable() dans l'IDE et le voir apparaître sous la forme (alias) Injectable(): any .

Donc tout type qui est finalement tout conduit à cette violation ?

Je ne sais pas ce que vous voulez dire -- seul any est any . Voulez-vous dire que Injectable est () => any et non any ? Mais l'erreur n'est pas pour Injectable , c'est pour Injectable() , qui est juste any .

Je voulais dire qu'à chaque fois qu'un élément est utilisé quelque part dans la déclaration, comme dans ce cas () => any , cela déclenche une violation ?

Comment pouvez-vous l'empêcher? Utiliser une assertion de type avec le décorateur Injectable() ?

Vous pouvez toujours aider à améliorer les frappes et à vous débarrasser de any . La règle ignorera également tout ce qui est explicitement exprimé avec x as any .

Serait-il possible de définir quelque chose de mieux fe pour l'Injectable () => Function ?

@CSchulz J'utilise ceci dans un fichier .d.ts si cela peut aider :

import core from '@angular/core';

declare module '@angular/core' {
    export interface InjectableDecorator {
        (): ClassDecorator;
    }
    export const Injectable: InjectableDecorator;

    export interface HostBindingDecorator {
        (hostPropertyName?: string): PropertyDecorator;
    }
    export const HostBinding: HostBindingDecorator;

    export interface HostListenerDecorator {
        (eventName: string, args?: string[]): MethodDecorator;
    }
    export const HostListener: HostListenerDecorator;
}

@nicolashenry Merci, avez-vous envisagé de le contribuer à angulaire lui-même ?

@CSchulz Je le ferai mais cela prendra un certain temps.

Merci, avez-vous également des saisies pour les définitions des fournisseurs ?

Dois-je nommer le fichier spécial ou ai-je besoin d'une configuration différente pour tslint ?

J'ai essayé de configurer le dossier en tant que type racine dans le tsconfig.json sans aucun changement.

J'utilise l'environnement CLI angulaire normal.

J'obtiens également des erreurs superflues lors de l'utilisation de cette règle en combinaison avec des variables non inutilisées. Si je désactive cette règle, les erreurs pour no-unsafe-any disparaissent.

Je vois également des erreurs superflues avec aucun objet inféré lorsqu'il est utilisé en combinaison avec des variables non inutilisées

Quelqu'un a-t-il trouvé une solution pour cela ? J'ai essayé la solution d.ts contournement @nicolashenry mais cela a causé des problèmes de cascade. J'utilise Angular 5.0.0 et je souhaite implémenter no-unsafe-any mais il apparaît sur chaque décorateur @injectable .


_édité_

J'ai essayé @nicolashenry « s solution à nouveau et examiné les erreurs qu'il a créées, et il est apparu que ce déterré un tas de cas où un sclérosé import se référait à un fichier inexistant. J'ai supprimé ces références et il semble que cela fonctionne maintenant.

Je vais fermer cela en faveur de # 2649, car cela semble être la racine de ces problèmes étranges à effets secondaires autour de la variable non inutilisée.

Bip boop ! 👉 TSLint est obsolète 👈 et vous devriez passer à typescript-eslint ! ??

🔒 Ce problème est verrouillé pour éviter d'autres discussions inutiles. Merci! ??

Cette page vous a été utile?
0 / 5 - 0 notes