js'类型'只能在.ts文件中使用 - 使用@ ts-check

时间:2018-02-19 03:28:54

标签: javascript typescript visual-studio-code

我开始在Visual Studio Code中使用的Node项目中使用TypeScript。我想按照"选择加入"策略,类似于Flow。因此,我将// @ts-check放在.js文件的顶部,希望为该文件启用TS。最终我想要同样的经历" linting"作为Flow,因此我安装了插件TSLint,因此我可以看到Intellisense警告/错误。

但我的文件看起来像:

// @ts-check

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

和我的tsconfig.json文件看起来像......

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

我收到此错误:[js] 'types' can only be used in a .ts file.,如下图所示。

error from vscode for ts

我看到this question建议在vscode中禁用javascript验证,但那时我没有向我显示任何 TypeScript Intellisense信息。

我尝试在我的vscode设置中将tslint.jsEnable设置为true,如TSLint扩展文档中所述,但没有运气。

为了将.js文件与TypeScript一起使用并获取Intellisense,正确的设置是什么,以便在运行任何TS命令之前知道代码中的错误是什么?

7 个答案:

答案 0 :(得分:90)

我正在使用@flow和vscode,但遇到了同样的问题。

  

我用这个步骤解决了它:

  1. 安装扩展程序Flow Language Support
  2. 禁用内置TypeScript扩展程序:
  3.   

    如何禁用内置TypeScript:

    1. 转到扩展程序标签
    2. 搜索 @builtin TypeScript和 JavaScript语言功能
    3. 点击停用

答案 1 :(得分:31)

在VS代码设置中使用"javascript.validate.enable": false,它不会禁用ESLINT。我同时使用ESLINT&流。只需按照Flow For Vs Code Setup

说明操作即可

在settings.json中添加此行。帮助 "javascript.validate.enable": false

答案 2 :(得分:0)

您必须使用.ts文件 - 例如test.ts获取Typescript 验证,intellisense typing vars,返回类型以及" typed"错误检查(例如,将string传递给期望number参数的方法会出错。

它将被转换为(标准).js via tsc

更新(11/2018):

需要根据投票,非常有用的评论和其他答案进行澄清。

types

  • 是的,您可以使用@ts-checktype个文件中.js检查VS代码 - 如动画中所示

  • 我最初指的是 Typescript types.ts中是这样的,这不是完全相同的事情:

    hello-world.ts

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

    这不会编译。 Error: Type "1" is not assignable to String

  • 如果您在 Javascript hello-world.js文件中尝试了此语法:

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

    显示OP引用的错误消息:[js] 'types' can only be used in a .ts file

如果我错过的内容涵盖了此内容以及OP的背景,请添加。让我们全都学习。

答案 3 :(得分:0)

对于在这里着陆并且所有其他解决方案均无效的人,请尝试一下。我正在使用打字稿+反应,我的问题是我将vscode中的文件关联为javascriptreact而不是typescriptreact,因此请检查以下各项的设置。

   "files.associations": {
    "*.tsx": "typescriptreact",
    "*.ts": "typescriptreact"
  },

答案 4 :(得分:0)

只需将变量默认为期望的类型即可:

(number=1) => ...
(number=1.0) => ...
(string='str') ...

答案 5 :(得分:0)

"typescript.validate.enable": false

IN VS Code -> Preferences -> Settings -> 搜索上述属性并禁用该属性

答案 6 :(得分:0)

此步骤适用于 Mac:

转到首选项,然后转到设置: Settings

进入设置后,在搜索栏中搜索 javascript.validate 并取消选中复选框: text in search bar

如果你想通过 json 编辑它,那么: 转到:代码 -> 首选项 -> 设置 -> 扩展 -> 向下滚动并找到“在 settings.json 中编辑”。 extension 然后添加

"javascript.validate.enable": false

showing settings.json