【问题标题】:Error: 'types' can only be used in a .ts file - Visual Studio Code using @ts-checkjs 'types' 只能在 .ts 文件中使用 - Visual Studio Code using @ts-check
【发布时间】:2018-07-29 06:36:10
【问题描述】:

我开始在我正在使用 Visual Studio Code 处理的 Node 项目中使用 TypeScript。我想遵循类似于 Flow 的“选择加入”策略。因此,我将// @ts-check 放在我的.js 文件的顶部,希望为该文件启用TS。最终我想要与 Flow 一样的“linting”体验,因此我安装了插件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.,如下图所示。

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

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

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

【问题讨论】:

  • 把扩展名改成ts有错误吗?
  • @israel.zinc 将扩展名更改为 .ts 按预期显示 TS 错误/警告。我想这可能可行,但我希望更多使用@ts-check 的选择加入方法,同时将我的所有扩展保留为.js
  • @BuZZ-dEE 可能是这样,但那里的答案并没有解决问题。我在最初的问题中提到了这一点。
  • 请考虑将接受的答案更改为正确答案:stackoverflow.com/a/50726464/2333214

标签: javascript typescript visual-studio-code


【解决方案1】:

我将 flow 与 vscode 一起使用,但遇到了同样的问题。我通过以下步骤解决了它:

  1. 安装扩展Flow Language Support

  2. 禁用内置的 TypeScript 扩展:

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

【讨论】:

  • 接受的答案并不总是正确的。带有 React Native 和 Flow 的 VSCode 中存在一个错误,它在 .js 文件中给出相同的消息,在这种情况下,您不应该更改为 .ts,而是继续使用 .js 并按照此处的建议解决问题!
  • 仅供参考:禁用此扩展基本上会抵消使用 VSCode 进行 JS 开发的所有好处。相反,您应该将以下内容添加到您的设置 json 文件中:"javascript.validate.enable": false
  • @heez 提到这会影响,查找对 javascript 文件的引用、自动完成等不会禁用 Javascript 语言功能。
  • @heez 说的有效答案
  • @heez 感谢您的保存,我发现了。现在没有错误。终于可以使用Visual Studio代码了。
【解决方案2】:

在你的 VS Code 设置中使用"javascript.validate.enable": false,它不会禁用 ESLINT。我同时使用 ESLINT 和 Flow。只需按照说明Flow For Vs Code Setup

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

【讨论】:

  • 有了这个你不必禁用打字稿。两者都可以存在。最佳解决方案!
  • 如果您使用 ESLint 来验证您的 Javascript,那么这个答案是最好的解决方案。更多信息:code.visualstudio.com/docs/languages/…github.com/flowtype/flow-for-vscode#setup
  • 在哪里可以找到 settings.json 文件?
  • 嗨 @i18n 转到:代码 -> 首选项 -> 设置 -> 扩展 -> 向下滚动并找到“在 settings.json 中编辑”。实际找到这个下的那个: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"} 点击settings.json 中的编辑并添加这个:"javascript.validate.enable": false
  • 很好的解决方案,请注意,您也可以按项目/工作区执行此操作。因此,您可以在一个中进行正常的typescript 验证,在另一个中进行flow 验证。在设置页面上查找Workspace 标签。
【解决方案3】:

我按照以下步骤解决了这个问题:

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

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

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

"javascript.validate.enable": false

【讨论】:

  • 谢谢你,这真的很有帮助!
【解决方案4】:

对于登陆这里并且所有其他解决方案均无效的任何人,请尝试一下。我正在使用 typescript + react,我的问题是我将 vscode 中的文件关联为javascriptreact 而不是typescriptreact,因此请检查以下条目的设置。

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

【讨论】:

    【解决方案5】:

    您必须使用 .ts 文件 - 例如test.ts 获取 Typescript validation, intellisense typing of vars、返回类型以及“类型化”错误检查(例如,将 string 传递给需要 number 参数的方法会出错)。

    它将被转译为(标准).jsvia tsc


    更新(2018 年 11 月):

    需要根据反对票、非常有帮助的 cmets 和其他答案进行澄清。

    types

    • 是的,您可以使用@ts-check.js 文件中执行type 签入VS Code - 如动画所示

    • 我最初所指的 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 上下文的内容,请添加。大家一起学习吧。

    【讨论】:

    • 我发现一些文章建议您可以在 JS 文件中使用 TS 的所有功能。这是来自Smashing Magazine 的一个,一个描述设置的GitHub issue for vscode,还有一些release notes for vscode
    • @jamez14 我没有尝试过/不需要使用.ts。 IINM,样本显示错误检查智能感知。您遇到的问题是(静态)typeing 您的变量,并返回 types - 例如foo:stringbar:numberfubar:MyClassmyMethod(f:Array):voidanotherMethod():string。嗯……
    • 是的,看来您的评估是正确的。在查看了更多示例之后,我发现在使用 @ts-check 属性时,它只是 JS 错误检查,而不是 TS。非常误导......
    【解决方案6】:

    “typescript.validate.enable”:假

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

    【讨论】:

      【解决方案7】:

      只需将变量默认为预期类型:

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

      【讨论】:

        【解决方案8】:

        对于 Windows 中的 VS 代码,单击设置。然后在顶部的搜索栏上,输入 javascript validate 并取消选中复选框,如下所示。

        【讨论】:

          猜你喜欢
          • 2017-05-10
          • 2017-07-23
          • 2017-10-28
          • 2018-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-05
          • 1970-01-01
          相关资源
          最近更新 更多