兼容模块与原生JS时,如何修复TSLint提示'use strict'不必要的错误?
解决TSLint报错:'use strict'在模块中不必要,同时兼容原生JS环境
这个问题我之前也碰到过——TSLint的strict规则会揪出模块环境里冗余的文件顶部'use strict',但咱们的代码要同时跑在模块(比如Node.js CommonJS)和原生浏览器环境里,原生环境确实离不开严格模式。
直接给你可行的修复方案:把'use strict'放到一个自执行包装函数内部,这样既绕开TSLint的报错,又能保证非模块环境下的代码严格执行。修改后的代码如下:
(function (global) { 'use strict'; function Foo() {} Foo.prototype.sayHello = function () { console.log("hello!"); }; if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { module.exports = { Foo: Foo }; } else { global.Foo = Foo; } })(typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : this);
为什么这么改?
- 避开TSLint报错:TSLint的
strict规则只检查文件顶部的'use strict'是否冗余,把它放在函数内部就不会触发规则了,而且函数内的严格模式本身是完全合法的语法。 - 兼容模块环境:Node.js的CommonJS模块和ES模块默认已经启用严格模式,所以即使我们不在文件顶部声明,代码也会在严格模式下执行,导出逻辑不受影响。
- 原生环境启用严格模式:在非模块环境(比如浏览器直接引入脚本)中,整个代码包裹在启用了
'use strict'的自执行函数里,确保严格模式生效,同时把Foo挂载到全局对象上供外部调用。
如果实在不想改代码,也可以在tslint.json里把strict规则设为false,但这不推荐——毕竟规则存在的意义就是帮我们避免冗余代码,还是调整代码结构更合理。
内容的提问来源于stack exchange,提问作者ar099968
相关产品推荐
相关产品推荐

