繁体   English   中英

错误:“类型”只能在 a.ts 文件中使用 - 使用 @ts-check 的 Visual Studio 代码

[英]Error: 'types' can only be used in a .ts file - Visual Studio Code using @ts-check

我开始在 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. 如下图所示。

来自 vscode for ts 的错误

我看到了这个问题,它建议在 vscode 中禁用 javascript 验证,但它没有向我显示任何TypeScript Intellisense 信息。

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

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

我正在使用带有 vscode 的,但遇到了同样的问题。 我通过以下步骤解决了它:

  1. 安装扩展流语言支持

  2. 禁用内置的 TypeScript 扩展:

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

在 VS Code 设置中使用"javascript.validate.enable": false ,它不会禁用 ESLINT。 我同时使用 ESLINT 和 Flow。 只需按照Vs 代码设置流程的说明进行操作

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

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

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

转到设置后,在搜索栏中搜索javascript.validate并取消选中该复选框: 搜索栏中的文字

如果您想通过 json 进行编辑,则:转到:代码 -> 首选项 -> 设置 -> 扩展 -> 向下滚动并找到“在 settings.json 中编辑”。 扩大 然后加

"javascript.validate.enable": false

显示 settings.json

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

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

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

它将通过tsc转换为(标准) .js


更新(11/2018):

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

types

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

  • 我最初所指的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 上下文的内容,请添加。 让我们都学习。

“typescript.validate.enable”:假

在 VS Code -> 首选项 -> 设置 -> 搜索上述属性并禁用该属性

我开始在我在 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. 如下图所示。

来自 vscode 的 ts 错误

我看到了这个问题,它建议在 vscode 中禁用 javascript 验证,但这并没有向我显示任何TypeScript Intellisense 信息。

我尝试设置tslint.jsEnabletrue在我的vscode设置作为TSLint扩展文档中提到,但没有运气。

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

对我有用的解决方案是将以下属性添加到settings.json

"js/ts.implicitProjectConfig.checkJs": true

Types/Interfaces只能应用于TypeScript个文件,.js文件为JavaScript个文件。

所以解决方案很简单:

将 extension.js 更改为 .tsx 以使用类型/接口。

[Mac] 在您的 Visual Studio Code 中键入以下命令。

  • 命令 + shift + P
  • 然后在 VS Code 顶部显示的搜索栏中键入“ Preferences: Open User Settings (JSON)
  • 添加行 -> "javascript.validate.enable": false

注意:“首选项:打开默认设置(JSON)”是不可编辑的

Go 到设置并搜索 javascript 验证然后禁用该选项以解决此问题。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM