Tslint: L'option du compilateur 'étend' nécessite une valeur de type chaîne

Créé le 11 janv. 2018  ·  17Commentaires  ·  Source: palantir/tslint

Rapport d'erreur

  • __TSLint version__ : 5.9.1
  • __TypeScript version__ : 2.6.2
  • __Exécution de TSLint via__ : CLI

Code TypeScript en train d'être lint

// code snippet

avec la configuration tslint.json :

{
    "defaultSeverity": "error",
    "extends": [
         "tslint-eslint-rules"
     ],
    "jsRules": {},
    "rules": {}
}

Comportement réel

Comportement attendu

Not A Bug

Commentaire le plus utile

@ StanLee12 quels sont les arguments CLI exacts que vous utilisez ? Je pense que vous utilisez peut-être la même configuration invalide que les autres journalistes de ce fil de discussion - le drapeau --project doit pointer vers un fichier tsconfig.json , pas tslint.json .

@MartijnKooij , des modifications ont été apportées à la mise en œuvre de la fonctionnalité extends dans tslint.json dans la version 5.9, ce qui a dû entraîner par inadvertance l'arrêt de votre configuration invalide. Comme je l'ai dit plus haut, vous devez pointer --project vers un fichier tsconfig.json. Aucun des documents TSLint n'a jamais affirmé que --project path/to/tslint.json est un modèle d'utilisation pris en charge.

Tous les 17 commentaires

quand je change tslint.json en

{
    "defaultSeverity": "error",
    "extends":  "tslint-eslint-rules",
    "jsRules": {},
    "rules": {}
}

c'est le spectacle A path in an 'extends' option must be relative or rooted, but 'tslint-eslint-rules' is not

comment puis-je obtenir le chemin de tslint-eslint-rules

Vous confondez tslint.json et tsconfig.json

Je suis sûr que je ne suis pas confus. Dans la version 5.8.1 , c'est correct.

Le même problème ici.
Modifié

"extends": [
    "tslint:recommended"
  ],

à

"extends": "./node_modules/tslint/lib/configs/recommended"

à réparer.

A path in an 'extends' option must be relative or rooted, but 'xxx' is not provient du compilateur dactylographié si votre tsconfig .json est erroné. Donc, soit vous utilisez -p tslint.json soit vous avez du contenu qui devrait être dans tslint.json ajouté à votre tsconfig.json.

Un autre utilisateur confus ici.
Nous appelons tslint depuis la CLI en utilisant
"lint": "tslint --project tslint.json -e src/**/*.spec.*",

Cela a très bien fonctionné l'année dernière. Nous venons de mettre à jour vers tslint 5.9.1 et voyons la même erreur :

error TS5024: Compiler option 'extends' requires a value of type string.

Notre tslint.json a les 2 extensions suivantes

{
    "extends": [
        "tslint:recommended",
        "tslint-sonarts"
    ],

Pourriez-vous nous donner un peu plus d'informations sur ce qui a changé et comment nous pouvons à nouveau résoudre ce problème ?

Au cas où cela serait effectivement pertinent, notre tsconfig ressemble à

{
    "compileOnSave": false,
    "compilerOptions": {
        "lib": [
            "dom",
            "es2015"
        ],
        "noImplicitAny": false,
        "target": "es5",
        "rootDir": "src",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true,
        "jsx": "preserve",
        "baseUrl": "src",
        "types": [
            "p-elements-core",
            "@types/jasmine",
            "@types/underscore",
            "@types/requirejs",
            "../../src/types"
        ]
    }
}

@ StanLee12 quels sont les arguments CLI exacts que vous utilisez ? Je pense que vous utilisez peut-être la même configuration invalide que les autres journalistes de ce fil de discussion - le drapeau --project doit pointer vers un fichier tsconfig.json , pas tslint.json .

@MartijnKooij , des modifications ont été apportées à la mise en œuvre de la fonctionnalité extends dans tslint.json dans la version 5.9, ce qui a dû entraîner par inadvertance l'arrêt de votre configuration invalide. Comme je l'ai dit plus haut, vous devez pointer --project vers un fichier tsconfig.json. Aucun des documents TSLint n'a jamais affirmé que --project path/to/tslint.json est un modèle d'utilisation pris en charge.

Merci pour l'explication supplémentaire, je n'ai pas compris quand @ajafff ​​a dit que nous avions le tslint au lieu du tsconfig comme paramètre --project.
Je suppose que quelque part il y a un article de blog sur l'utilisation de tslint qui contient cette erreur.
La documentation sur https://palantir.github.io/tslint/usage/cli/ à ce sujet est correcte, du moins maintenant elle l'est ;)

Merci encore, et pour l'exhaustivité et les autres. Nous avons changé:
"lint": "tslint --project tslint.json -e src/**/*.spec.*",
dans ce
"lint": "tslint --project tsconfig.json -e src/**/*.spec.*",

@ajafff @adidahiya Je suis vraiment désolé, c'est de ma faute, merci beaucoup !

mocha-tslint ne fonctionne plus à cause de ce problème également. Et là, configFilePath doit pointer vers tslint.json. si j'utilise tsconfig.json à la place :
const lint = require('mocha-tslint'); const configFilePath = './tsconfig.json'; lint(configFilePath);
j'obtiens ce résultat :
tslint No valid rules have been specified

Il fonctionnait toujours avec 5.8

@DaveXCS Cela est probablement dû au fait que mocha-tslint fait quelque chose de mal. Je suppose qu'ils utilisent une API privée (runner.ts) et utilisent le fichier de configuration comme argument -c AND -p .

J'ai essayé de comprendre le problème dans mocha-tslint mais je ne vois pas vraiment de problème ici :
const tslintConfig = Configuration.loadConfigurationFromPath(configFilePath); fileNames.forEach((file) => test(file, tslintConfig));
const TSLint = require('tslint'); const Linter = TSLint.Linter; const Configuration = TSLint.Configuration;
fs.readFile(file, (err, sourceBuffer) => { const linter = new Linter(options); const source = sourceBuffer.toString(); linter.lint(file, source.toString(), config);

@DaveXCS Le problème est cette ligne : https://github.com/t-sauer/mocha-tslint/blob/0ba7f64be458cd74343a4149dff323d5bfd195a5/index.js#L24
Il ne doit pas transmettre le chemin vers tslint.json à une fonction qui attend le chemin vers un tsconfig.json

J'ai ouvert un numéro pour vous : https://github.com/t-sauer/mocha-tslint/issues/9

Merci de votre aide.
j'ai remplacé le --project sur le cli par tsconfig.json au lieu de tslint.json et j'ai réécrit "mocha-tslint" (y compris la vérification de type):
https://gist.github.com/DaveXCS/3bd930f7093b748f551c99e80d57c578

c'est scandaleusement mal documenté, juste déroutant et pas du tout intuitif.

@devguyrun la documentation d'utilisation de la --project vers un fichier tsconfig.json . Si vous pensez que cela pourrait être plus clair, n'hésitez pas à envoyer un PR

erreur TS18001 : un chemin dans une option 'extends' doit être relatif ou rooté, mais '<%= sourcedir.split('/').map(x => '..').join('/') %

/tsconfig.json' ne l'est pas.

J'ai une autre erreur.

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