错误:& # 39;类型# 39;只能在.ts文件中使用- Visual Studio Code使用@ts-check

我开始在一个Node项目中使用TypeScript,我正在Visual Studio Code中工作。我想遵循“选择加入”策略,类似于“心流”。因此,我将// @ts-check放在我的.js文件的顶部,希望为该文件启用TS。最终,我想要与Flow相同的“检测”体验,因此我安装了插件TSLint,这样我就可以看到智能感知警告/错误。

但我的文件是这样的:

// @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

我看到这个问题建议禁用javascript验证在vscode,但然后它没有显示我任何 TypeScript智能感知信息。

我试着在我的vscode设置中设置tslint.jsEnabletrue,正如在TSLint扩展文档中提到的那样,但没有运气。

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

254103 次浏览

你必须使用.ts文件——例如test.ts来获取vars的Typescript 验证、智能感知 typing,返回类型,以及“类型化”错误检查(例如,将string传递给一个期望number参数的方法将出错)。

它将被转译为(standard) .js 通过tsc


更新(11/2018):

根据反对票,非常有用的评论和其他回答,需要澄清。

types

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

  • 我最初指的打印稿 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 < / p >

  • 如果你在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的上下文,请补充。让我们一起学习。

我使用与vscode,但有同样的问题。我通过以下步骤解决了这个问题:

  1. 安装扩展流语言支持

  2. 关闭内置的TypeScript扩展:

    1. 进入扩展选项卡
    2. 搜索@内置TypeScript和JavaScript语言特性
    3. 单击禁用

在VS Code设置中使用"javascript.validate.enable": false,它不会禁用ESLINT。我使用ESLINT和amp;流。简单地按照指示流程Vs代码设置

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

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

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

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

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

“typescript.validate.enable":假的

在VS Code ->偏好→设置→搜索上述属性并禁用该属性

我遵循以下步骤来解决这个问题:

进入“首选项”,然后进入“设置”: Settings < / p >

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

如果你想通过json编辑它,那么: 转到:代码->偏好→设置→扩展→向下滚动并找到“Edit in settings.json”。extension 然后添加< / p >

"javascript.validate.enable": false

显示设置。json < / >

对于windows中的VS code,单击设置。然后在顶部的搜索栏中,输入javascript validate,然后取消选中如下所示的复选框。 enter image description here < / p >

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

"js/ts.implicitProjectConfig.checkJs": true

类型/接口只能应用于TypeScript文件,而.js文件是JavaScript文件。

所以解决方案很简单:

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