Tslint: no-unsafe-any: sollte sich nicht über Funktionsaufrufe beschweren, deren Parameter irgendwelche verwenden

Erstellt am 10. Mai 2017  ·  24Kommentare  ·  Quelle: palantir/tslint

Fehlerbericht

  • __TSLint-Version__: 5.2.0
  • __TypeScript-Version__: 2.2.2
  • __TSLint ausführen über__: CLI

TypeScript-Code wird linted

// 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) => {

mit tslint.json Konfiguration:

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

Tatsächliches Verhalten

Unsafe use of expression of type 'any'.

Erwartetes Verhalten

Sollte sich nicht über die Funktion inject beschweren.

Hilfreichster Kommentar

Ich erhalte auch überflüssige Fehler, wenn ich diese Regel in Kombination mit No-Unused-Variablen verwende. Wenn ich diese Regel deaktiviere, werden die Fehler für no-unsafe-any ausgegeben.

Ich sehe auch irrelevante Fehler mit no-inferred-object, wenn sie in Kombination mit no-unused-variables verwendet werden

Alle 24 Kommentare

Könnten Sie ein reproduzierbares Beispiel geben?

Hier ist ein Repro-Repo

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

Ich bin mir bei den Importen in _test.ts_ nicht sicher, die auch mit unsicheren irgendwelchen verletzt werden, aber die Verwendung von Methoden in der _app.component.spec.ts_ sollte in Ordnung sein.

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

Ich habe Ihr Repo geklont und versucht, die Fusselfehler zu reproduzieren.

Beim Ignorieren von test.ts ich folgendes bekommen:

Dies sind erwartete Fehler.

Vielleicht fehlt etwas in Ihrem Repro-Repository?

Ich habe das Gefühl, dass es einige Inkompatibilitäten zwischen verschiedenen Erweiterungen für tslint gibt.

Ich habe es in diesem Moment noch einmal getestet und habe die gleichen Verstöße wie @ajafff ​​bekommen. Ich werde versuchen, eine Shrinkwrap-Datei hochzuladen, um meinen Abhängigkeitsbaum anzuzeigen.

Scheint eine Kollision mit no-unused-variable zu sein. Sie sollten es mit den folgenden Regeln reproduzieren:

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

Kann #2649 sein.

Ja könnte möglich sein, ich war mir nicht sicher.

Ich frage mich immer noch, wie ich diesen Fehler mit dem anfänglichen Regelsatz bekommen habe.

Ich kann das Problem mit dem anfänglichen Regelsatz vermeiden, nachdem ich die Abhängigkeiten von Grund auf neu installiert habe. Ich kann nicht sagen, welche Abhängigkeiten sich gegenseitig stören.

Die Verwendung von @Injectable() erzeugt ein falsch positives Ergebnis, ich habe das Repository aktualisiert.

Injectable() ist vom Typ any deklariert. @angular/core/src/di/metadata.d.ts definiert export declare const Injectable: InjectableDecorator; und InjectableDecorator deklariert (): any; .
Oder Sie könnten einfach den Mauszeiger über @Injectable() in der IDE bewegen und sehen, wie es als (alias) Injectable(): any .

Also führt jeder Typ, der schließlich irgendeiner ist, zu dieser Verletzung?

Ich bin mir nicht sicher, was Sie meinen - nur any ist any . Meinst du, dass Injectable () => any und nicht any ? Aber der Fehler ist nicht für Injectable , sondern für Injectable() , also nur any .

Ich meinte, dass jedes Mal, wenn irgendwo in der Deklaration irgendein verwendet wird, wie in diesem Fall () => any , eine Verletzung ausgelöst wird?

Wie können Sie es verhindern? Verwenden Sie eine Typzusicherung mit dem Injectable() Dekorator?

Sie können immer helfen, die Eingaben zu verbessern und any loszuwerden. Die Regel ignoriert auch alles, was explizit mit x as any .

Wäre es möglich, etwas Besseres zu definieren, zB für das Injizierbare () => Function ?

@CSchulz Ich verwende dies in einer .d.ts-Datei, wenn es helfen kann:

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 Danke, hast du daran angle selbst beizutragen?

@CSchulz werde ich, aber es wird einige Zeit dauern.

Danke, hast du auch ein paar Eingaben für die Anbieterdefinitionen?

Muss ich die Datei speziell benennen oder brauche ich eine andere Konfiguration für tslint?

Ich habe versucht, den Ordner als Root-Typen in der tsconfig.json ohne Änderung zu konfigurieren.

Ich verwende die normale Angular CLI-Umgebung.

Ich erhalte auch überflüssige Fehler, wenn ich diese Regel in Kombination mit No-Unused-Variablen verwende. Wenn ich diese Regel deaktiviere, werden die Fehler für no-unsafe-any ausgegeben.

Ich sehe auch irrelevante Fehler mit no-inferred-object, wenn sie in Kombination mit no-unused-variables verwendet werden

Hat dafür jemand eine Lösung gefunden? Ich habe den von @nicolashenry vorgeschlagenen d.ts Workaround ausprobiert, aber das hat zu kaskadierenden Problemen geführt. Ich verwende Angular 5.0.0 und möchte no-unsafe-any implementieren, aber es wird auf jedem @injectable Dekorator angezeigt.


_bearbeitet_

Ich habe die Problemumgehung von @nicolashenry erneut ausprobiert und aufgedeckt wurde , in denen sich ein sklerotisches import auf eine nicht vorhandene Datei bezog. Ich habe diese Referenzen entfernt und es sieht so aus, als ob es jetzt funktioniert.

Ich werde dies zugunsten von # 2649 schließen, da dies die Wurzel dieser seltsamen Nebenwirkungen mit nicht unbenutzten Variablen zu sein scheint.

🤖 Beep boop! 👉 TSLint ist veraltet 👈 und Sie sollten zu typescript-eslint wechseln ! 🤖

🔒 Dieses Problem wird gesperrt, um weitere unnötige Diskussionen zu vermeiden. Danke schön! 👋

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen