js 'types' può essere utilizzato solo in un file .ts - Visual Studio Code utilizzando @ ts-check


105

Sto iniziando a utilizzare TypeScript in un progetto Node su cui sto lavorando in Visual Studio Code. Volevo seguire la strategia "opt-in", simile a Flow. Pertanto ho messo // @ts-checkin cima al mio .jsfile nella speranza di abilitare TS per quel file. In definitiva, voglio la stessa esperienza di "linting" di Flow, quindi ho installato il plugin TSLint in modo da poter vedere gli avvisi / errori di Intellisense.

Ma con il mio file simile a:

// @ts-check

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

e il mio tsconfig.jsonfile sembra ...

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

Ottengo questo errore: [js] 'types' can only be used in a .ts file.come mostrato di seguito nell'immagine.

errore da vscode per ts

Ho visto questa domanda che consigliava di disabilitare la convalida di javascript in vscode ma poi questo non mi mostra alcuna informazione su TypeScript Intellisense.

Ho provato a impostare tslint.jsEnablesu truenelle mie impostazioni vscode come menzionato nei documenti dell'estensione TSLint ma senza fortuna.

Qual è l'impostazione corretta per utilizzare i .jsfile con TypeScript e ottenere Intellisense in modo da sapere quali sono gli errori nel mio codice prima di eseguire qualsiasi comando TS?


Hai qualche errore se cambi l'estensione in ts?
Israel Zinc

@ israel.zinc cambiando l'estensione in .ts mostrarmi gli errori / avvisi di TS come previsto. Immagino che questo potrebbe funzionare, ma speravo in più del metodo di attivazione utilizzando @ts-checkmantenendo tutte le mie estensioni come.js
james


@ BuZZ-dEE potrebbe essere, ma le risposte non hanno risolto il problema. Ne ho parlato nella mia domanda originale.
james

Risposte:


204

Sto usando @flow con vscode ma ho avuto lo stesso problema.

L'ho risolto con questi passaggi:

  1. installare l'estensione Flow Language Support
  2. disabilitare l'estensione TypeScript incorporata:

Come disabilitare TypeScript integrato:

  1. vai alla scheda estensioni
  2. cerca @builtin TypeScript e JavaScript Language Features
  3. fare clic su Disabilita

5
La risposta accettata non è sempre corretta. C'è un bug in VSCode con React Native e Flow che fornisce lo stesso messaggio nei file .js, e in tal caso NON DOVRESTI cambiare in .ts, ma continua con .js e risolvi il problema come suggerito qui !!
pashute

107
Solo un FYI: disabilitare questa estensione sostanzialmente annulla tutte le cose belle dello sviluppo JS con VSCode. Invece, dovresti semplicemente aggiungere quanto segue nel tuo file json delle impostazioni: "javascript.validate.enable": false
heez

1
come ha affermato @heez, ciò influirà, la ricerca di riferimenti a file javascript, il completamento automatico ecc. non disabilita le funzionalità del linguaggio Javascript.
Ajitsen

2
La risposta valida è stata data da @heez
Asim Olmez il

1
@heez grazie per il salvataggio, l'ho scoperto. Nessun errore ora. Può finalmente usare il codice di Visual Studio.
Anish Arya

93

Usa "javascript.validate.enable": falsenelle impostazioni del tuo codice VS, non disabilita ESLINT. Uso sia ESLINT che Flow. Segui semplicemente le istruzioni Flow For Vs Code Setup

Aggiungendo questa riga in settings.json. aiuta "javascript.validate.enable": false


4
Con questo non devi disabilitare il dattiloscritto. Entrambi possono esistere. Soluzione migliore!
Nirus

2
Se stai utilizzando ESLint per convalidare il tuo Javascript, questa risposta è la soluzione migliore. Maggiori informazioni: code.visualstudio.com/docs/languages/… e anche github.com/flowtype/flow-for-vscode#setup
Beau Smith

1
Dove posso trovare il file settings.json.?
i18 il

1
Ciao @ i18n Vai a: Codice -> Preferenze -> Impostazioni -> Estensioni -> Scorri verso il basso e trova "Modifica in settings.json". In realtà trovare quello in questo: 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"}fare clic su Modifica in settings.json e aggiungere questo: "javascript.validate.enable": false.
Fotis Tsakiris

meglio .. funziona bene per me
Betini O. Heleno il

0

È necessario utilizzare un .tsfile, ad esempio test.tsper ottenere la convalida typing del dattiloscritto , l'intellisense di vars, i tipi restituiti, nonché il controllo degli errori "tipizzati" (ad esempio il passaggio di a stringa un metodo che prevede unnumber parametro vada in errore).

Verrà trasferito in (standard) .js tramitetsc .


Aggiornamento (11/2018):

Chiarimento necessario sulla base di voti negativi, commenti molto utili e altre risposte.

types

  • Sì, puoi eseguire il typecheck-in di VS Code nei .jsfile con @ts-check- come mostrato nell'animazione

  • Quello a cui mi riferivo originariamente per Typescript types è qualcosa di simile in .tscui non è proprio la stessa cosa:

    hello-world.ts

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

    Questo non verrà compilato. Error: Type "1" is not assignable to String

  • se hai provato questa sintassi in un file Javascript hello-world.js :

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

    Viene visualizzato il messaggio di errore a cui fa riferimento l'OP: [js] 'types' can only be used in a .ts file

Se c'è qualcosa che mi è sfuggito che copre questo e il contesto dell'OP, aggiungi. Impariamo tutti.


Ho trovato alcuni articoli che suggeriscono che puoi utilizzare tutte le funzionalità di TS all'interno di un file JS. Eccone uno tratto da Smashing Magazine , un numero di GitHub per vscode che descrive la configurazione e alcune note di rilascio per vscode
james

@ jamez14 Non ho provato / ho avuto la necessità di non utilizzare .ts. IINM, gli esempi mostrano il controllo degli errori e l' intellisense . Il problema che hai è (statico) typeing le variabili, e il ritorno typescome pure - per esempio foo:string, bar:number, fubar:MyClass, myMethod(f:Array):void, anotherMethod():string. Hth ...
EdSF

Sì, sembra che tu abbia ragione con la tua valutazione. Dopo aver esaminato di più gli esempi, vedo che è solo il controllo degli errori JS, non TS, quando si utilizza l' @ts-checkattributo. Molto fuorviante ...
james

-1

Per chi atterra qui e tutte le altre soluzioni non hanno funzionato, provalo. Sto usando typescript + react e il mio problema era che stavo associando i file in vscode in quanto javascriptreactnon typescriptreactcontrollava le impostazioni per le seguenti voci.

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.