Tslint - Typ trivial abgeleitet - Warum ist es eine schlechte Praxis, den Typ hier aufzunehmen?

73

In VSCode beschwert sich der Linter tslint, wenn ich den folgenden Code mit dem Typ hinzufüge:

serverId: number = 10;

Und gibt die folgende Nachricht:

[tslint] Typennummer, die trivial aus einem Zahlenliteral abgeleitet wurde, entfernen Sie Typanmerkungen (nicht ableitbare Typen)

Wenn ich den Typ 'Nummer' entferne, verschwindet die Nachricht.

Warum ist es eine schlechte Praxis, die Typinformationen hier anzugeben?

Tony Scialo
quelle
4
palantir.github.io/tslint/rules/no-inferrable-types sagt: "Explizite Typen, auf die der Compiler leicht schließen kann, machen den Code ausführlicher."
Blorgbeard ist
Sie sagen ausführlicher, als wäre es immer eine schlechte Sache, manchmal ist ausführlicher klarer.
Eric Brown - Cal

Antworten:

75

Es ist keine schlechte Praxis, sondern serverId: number = 10ist überflüssig, weil numberTyp wird geschlossen , wenn eine Eigenschaft zugeordnet ist. Dies ist, wovor TSLint no-inferrable-typeswarnt:

Explizite Typen, auf die der Compiler leicht schließen kann, machen den Code ausführlicher.

Sofern nicht die Möglichkeit besteht, dass die serverIdEigenschaft zunächst undefiniert ist, aber später definiert wird (z. B. in der constructorFunktion), numberkann sie sicher weggelassen werden.

Dieser Ansatz funktioniert am besten mit noImplicitAnyOptionen, da auf diese Weise keine Wahrscheinlichkeit besteht, dass ein Typ versehentlich weggelassen wird, weil er nicht abgeleitet wurde.

Estus Flask
quelle
39

Wie oben erwähnt, ist es technisch redundant und kann als Unordnung angesehen werden. Persönlich interessiert mich diese Meinung nicht und ich bevorzuge es, sowohl den Typ als auch den Wert für eine Vielzahl spezifischer kleiner Workflow-Gründe zu haben, und ich betrachte es nicht als das Maß an Unordnung, das eine Regel rechtfertigt. Wenn Sie es deaktivieren möchten, gehen Sie wie folgt vor.

  • Öffnen Sie tslint.json
  • Suchen Sie das Attribut "no-inferrable-types"
  • ignore-propertieszu seinem Array hinzufügen

relevante tslint-Dokumente https://palantir.github.io/tslint/rules/no-inferrable-types/

Alex Spera
quelle
22

Dieser Fehler ist auf Ihre Konfiguration in der tslint.jsonDatei zurückzuführen.

Initialisieren Sie entweder einfach Ihre Variable als

serverId = 10;

oder

serverId: number;

oder legen Sie einfach Ihre Konfiguration für die no-inferrable-typesin Ihrer Datei tslint.json als fest

no-inferrable-types: false
Pardeep Jain
quelle
8

Wenn Sie hierher gekommen sind, um nach einer Eslint-Lösung zu suchen, weil Tslint veraltet ist , fügen Sie diese Regel zu Ihrer .eslintrc.jsDatei hinzu:

module.exports = {
  ...m
  rules: {
    ...,
    "@typescript-eslint/no-inferrable-types": "off",
    ...
  },
};

Paul Razvan Berg
quelle
4
Dank dafür. Lief wie am Schnürchen. Ehrlich gesagt finde ich es dumm, dass dies überhaupt eine Sache ist. Ich verwende TypeScript. Lassen Sie mich explizite Typen definieren. Wenn ich abgeleitete Typdeklarationen wollte, würde ich JavaScript verwenden, was ich vermeiden möchte, daher verwende ich in erster Linie TypeScript.
A. Cucci
2

Es ist unnötig, es liefert keine neuen Informationen. Es ist im Grunde ein Kommentar, der sagt "10 ist eine Zahl".

Sulthan
quelle
3
In diesem Fall haben Sie Recht ... Es kann jedoch zu Mehrdeutigkeiten bei Zeichenfolgen und Booleschen Werten kommen ... (Eine gute Benennung von Variablen sollte ebenfalls befolgt werden ...)
Eddie B
2

Das mag jetzt seltsam sein, aber ich habe den ähnlichen Fehler erhalten und konnte das Attribut "no-inferrable-types" in der Datei tslint.json meiner eckigen App nicht finden. Ich weiß nicht, warum es das überhaupt nicht erzeugt hat, aber ich musste es hier einfügen

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

Und dann hat es wie ein Zauber funktioniert!

PS: Dies ist für jemanden, der möglicherweise mit dem gleichen Problem wie ich umherwandert, oder ich kann mich irren, weil niemand in einer der genannten Lösungen erwähnt hat, dass dies von unserem Ende in der JSON-Datei hinzugefügt werden muss.

Akshay kumar
quelle
1

Es könnte als Lärm gesehen werden. Es ist wichtiger, die nicht trivialen Teile einzugeben

julianisch
quelle
0

in tslint.json Datei hinzufügen oder diese Regel ausführen:

"no-inferrable-types": [
  true,
  "ignore-params",
  "ignore-properties"
]
Mehdi Roostaeian
quelle