js 'types' ne peuvent être utilisés que dans un fichier .ts - Visual Studio Code à l'aide de @ ts-check

105

Je commence à utiliser TypeScript dans un projet Node sur lequel je travaille dans Visual Studio Code. Je voulais suivre la stratégie "opt-in", similaire à Flow. Par conséquent, je mets // @ts-checken haut de mon .jsfichier dans l'espoir d'activer TS pour ce fichier. En fin de compte, je veux la même expérience de "peluchage" que Flow, donc j'ai installé le plugin TSLint pour que je puisse voir les avertissements / erreurs Intellisense.

Mais avec mon fichier ressemblant à:

// @ts-check

module.exports = {
  someMethod: (param: string): string => {
    return param;
  },
};

et mon tsconfig.jsonfichier ressemble à ...

{
  "compilerOptions": {
      "target": "es2016",
      "module": "commonjs",
      "allowJs": true
  }
}

J'obtiens cette erreur: [js] 'types' can only be used in a .ts file.comme indiqué ci-dessous dans l'image.

erreur de vscode pour ts

J'ai vu cette question qui recommandait de désactiver la validation javascript dans vscode, mais cela ne me montre aucune information TypeScript Intellisense.

J'ai essayé la mise tslint.jsEnableà truemes paramètres de vscode comme mentionné dans l'extension TSLint docs , mais pas de chance là - bas.

Quelle est la configuration correcte pour utiliser des .jsfichiers avec TypeScript et obtenir Intellisense afin que je sache quelles sont les erreurs dans mon code avant d'exécuter des commandes TS?

James
la source
Avez-vous une erreur si vous changez l'extension en ts?
Israel Zinc
@ israel.zinc en changeant l'extension pour .tsme montrer les erreurs / avertissements TS comme prévu. Je suppose que cela pourrait fonctionner, mais j'espérais plus de la méthode opt-in en utilisant @ts-checktout en conservant toutes mes extensions comme.js
james
@ BuZZ-dEE peut-être, mais les réponses n'ont pas résolu le problème. Je l'ai mentionné dans ma question initiale.
james

Réponses:

204

J'utilise @flow avec vscode mais j'ai eu le même problème.

Je l'ai résolu avec ces étapes:

  1. installer l'extension Flow Language Support
  2. désactivez l'extension TypeScript intégrée:

Comment désactiver TypeScript intégré:

  1. aller à l' onglet extensions
  2. rechercher @builtin TypeScript et les fonctionnalités du langage JavaScript
  3. cliquez sur Désactiver
Idan Dagan
la source
5
La réponse acceptée n'est pas toujours correcte. Il y a un bogue dans VSCode avec React Native et Flow qui donne le même message dans les fichiers .js, et dans ce cas, VOUS NE DEVRIEZ PAS changer en .ts, mais continuer avec .js et résoudre le problème comme suggéré ici !!
pashute
107
Juste un FYI: la désactivation de cette extension annule fondamentalement toutes les bonnes choses sur le développement JS avec VSCode. Au lieu de cela, vous devez simplement ajouter ce qui suit dans votre fichier json de paramètres: "javascript.validate.enable": false
heez
1
comme @heez l'a mentionné, cela affectera, la recherche de références aux fichiers javascript, la saisie semi-automatique, etc. ne désactivent pas les fonctionnalités du langage Javascript.
Ajitsen
2
La réponse valide a été dite par @heez
Asim Olmez
1
@heez merci pour la sauvegarde, j'ai découvert. Aucune erreur maintenant. Peut enfin utiliser le code Visual Studio.
Anish Arya le
93

Utilisez "javascript.validate.enable": falsedans vos paramètres VS Code, cela ne désactive pas ESLINT. J'utilise à la fois ESLINT et Flow. Suivez simplement les instructions Flow For Vs Code Setup

Ajout de cette ligne dans settings.json. Aide "javascript.validate.enable": false

Adeel Imran
la source
4
Avec cela, vous n'avez pas à désactiver le typographie. Les deux peuvent exister. Meilleure solution!
Nirus
2
Si vous utilisez ESLint pour valider votre Javascript, cette réponse est la meilleure solution. Plus d'infos: code.visualstudio.com/docs/languages/… et aussi github.com/flowtype/flow-for-vscode#setup
Beau Smith
1
Où puis-je trouver le fichier settings.json.?
i18n
1
Salut @ i18n Allez dans: Code -> Préférences -> Paramètres -> Extensions -> Faites défiler vers le bas et trouvez "Modifier dans settings.json". En fait , trouver une sous ceci: Include Languages Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and emmet supported language. E.g.: {"vue-html": "html", "javascript": "javascriptreact"}cliquez sur Modifier dans settings.json et ajoutez ceci: "javascript.validate.enable": false.
Fotis Tsakiris
meilleur .. fonctionne bien pour moi
Betini O. Heleno
0

Vous devez utiliser un .tsfichier - par exemple test.tspour obtenir la validation Typescript , l'intellisensetyping des vars, les types de retour, ainsi que la vérification des erreurs "typées" (par exemple, passer a stringà une méthode qui s'attend à ce qu'un numberparamètre entraîne une erreur).

Il sera transpilé en (standard) .js viatsc .


Mise à jour (11/2018):

Clarification nécessaire basée sur des votes négatifs, des commentaires très utiles et d'autres réponses.

types

  • Oui, vous pouvez typearchiver VS Code dans des .jsfichiers avec @ts-check- comme indiqué dans l'animation

  • Ce à quoi je faisais initialement référence pour Typescript types est quelque chose comme ça dans .tslequel ce n'est pas tout à fait la même chose:

    hello-world.ts

    function hello(str: string): string {
      return 1;
    }
    
    function foo(str:string):void{
       console.log(str);
    }

    Cela ne compilera pas. Error: Type "1" is not assignable to String

  • si vous avez essayé cette syntaxe dans un fichier Javascript hello-world.js :

    //@ts-check
    
    function hello(str: string): string {
      return 1;
    }
    
    function foo(str:string):void{
       console.log(str);
    }

    Le message d'erreur référencé par OP s'affiche: [js] 'types' can only be used in a .ts file

S'il y a quelque chose que j'ai manqué qui couvre cela ainsi que le contexte du PO, veuillez ajouter. Apprenons tous.

EdSF
la source
J'ai trouvé quelques articles qui suggèrent que vous pouvez utiliser toutes les fonctionnalités de TS dans un fichier JS. En voici un de Smashing Magazine , un problème GitHub pour vscode qui décrit la configuration, et quelques notes de version pour vscode
James
@ jamez14 Je n'ai pas essayé / eu le besoin de ne pas utiliser .ts. IINM, les exemples montrent la vérification des erreurs et l' intellisense . La question que vous avez est (statique) typeing vos variables, et le retour typesaussi bien - par exemple foo:string, bar:number, fubar:MyClass, myMethod(f:Array):void, anotherMethod():string. Hth ...
EdSF
oui, on dirait que vous avez raison avec votre évaluation. Après avoir examiné plus en détail les exemples, je vois qu'il s'agit simplement d'une vérification d'erreur JS, et non de TS, lors de l'utilisation de l' @ts-checkattribut. Very trompeuse ...
james
-1

Pour quiconque atterrit ici et toutes les autres solutions n'ont pas fonctionné, essayez-le. J'utilise tapuscrit + réagis et mon problème est que je fréquentait les fichiers vscode que javascriptreactne pas typescriptreactvérifier vos paramètres pour les entrées suivantes.

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },
Kenny Hammerlund
la source