I am starting to use TypeScript in a Node project I am working on in Visual Studio Code. I wanted to follow the "opt-in" strategy, similar to Flow. Therefore I put // @ts-check
at the top of my .js
file in hope to enable TS for that file. Ultimately I want the same experience of "linting" as Flow, therefore I installed the plugin TSLint so I could see Intellisense warnings/errors.
But with my file looking like:
// @ts-check
module.exports = {
someMethod: (param: string): string => {
return param;
},
};
and my tsconfig.json
file looking like...
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"allowJs": true
}
}
I get this error: [js] 'types' can only be used in a .ts file.
as shown below in the image.
I saw this question which recommended disabling javascript validation in vscode but then that doesn't show me any TypeScript Intellisense info.
I tried setting tslint.jsEnable
to true
in my vscode settings as mentioned in the TSLint extension docs but no luck there.
What is the correct setup in order to use .js
files with TypeScript and get Intellisense so I know what the errors in my code are before I run any TS commands?
I'm using @flow with vscode but had the same problem.
I solved it with this steps:
- install the extension Flow Language Support
- disable the built-in TypeScript extension:
How to disable built-in TypeScript:
- go to extensions tab
- search for @builtin TypeScript and
JavaScript Language Features
- click on Disable
Use "javascript.validate.enable": false
in your VS Code settings, It doesn't disable ESLINT. I use both ESLINT & Flow. Simply follow the instructions Flow For Vs Code Setup
Adding this line in settings.json. Helps
"javascript.validate.enable": false
You must use a .ts
file - e.g. test.ts
to get Typescript validation, intellisense typing
of vars, return types, as well as "typed" error checking (e.g. passing a string
to a method that expects an number
param will error out).
It will be transpiled into (standard) .js
via tsc
.
Update (11/2018):
Clarification needed based on down-votes, very helpful comments and other answers.
types
Yes, you can do type
checking in VS Code in .js
files with @ts-check
- as shown in the animation
What I originally was referring to for Typescript types
is something like this in .ts
which isn't quite the same thing:
hello-world.ts
function hello(str: string): string {
return 1;
}
function foo(str:string):void{
console.log(str);
}
This will not compile. Error: Type "1" is not assignable to String
if you tried this syntax in a Javascript hello-world.js
file:
//@ts-check
function hello(str: string): string {
return 1;
}
function foo(str:string):void{
console.log(str);
}
The error message referenced by OP is shown: [js] 'types' can only be used in a .ts file
If there's something I missed that covers this as well as the OP's context, please add. Let's all learn.
For anyone who lands here and all the other solutions did not work give this a try. I am using typescript + react and my problem was that I was associating the files in vscode as javascriptreact
not typescriptreact
so check your settings for the following entries.
"files.associations": {
"*.tsx": "typescriptreact",
"*.ts": "typescriptreact"
},