未安装TypeScript环境时.js文件出现TS报错的问题求助
解决JS文件中出现TS重复变量声明报错的问题
问题原因
你遇到的Cannot redeclare block-scoped variable 'message'报错,是因为VS Code内置了TypeScript语言服务——即便你没全局或本地安装TS,它也会自动对JS文件做类型与语法检查。你的代码里,message变量在Part1和Part3的顶层作用域被用let重复声明,TS的检查规则不允许块级作用域变量重复声明,因此抛出了这个错误。
解决方案
以下是几种无需关闭全局JS校验的解决办法:
1. 用块级作用域隔离各部分代码
给每个Part的代码套上{},利用let的块级作用域特性,让每个message只在自身块内有效:
//Part 1 { function greeting() { return "Good Morning!"; } let message = greeting; message(); greeting(); } //Part 2 { function greeting() { return "Good Morning!"; } function printMessage(anfunction) { console.log(anfunction()); } printMessage(greeting); } //Part 3 { function greeting() { return function () { return "Good Morning!"; }; } let anFunction = greeting(); let message = anFunction(); }
2. 修改重复的变量名
把其中一个message改成其他名称,比如将Part1里的message改为message1,避免重复声明:
//Part 1 function greeting() { return "Good Morning!"; } let message1 = greeting; message1(); greeting(); //Part 3 function greeting() { return function () { return "Good Morning!"; }; } let anFunction = greeting(); let message = anFunction();
3. 针对特定错误忽略检查
如果不想修改代码,可以在重复声明的message上方添加// @ts-ignore注释,只忽略这一行的TS错误:
//Part 3 function greeting() { return function () { return "Good Morning!"; }; } let anFunction = greeting(); // @ts-ignore let message = anFunction();
或者在文件顶部添加// @ts-nocheck,关闭当前文件的TS检查(仅影响该文件,不会全局关闭JS校验)。
内容的提问来源于stack exchange,提问作者ArtificialScientist
相关产品推荐
相关产品推荐

