我在我的项目中使用TypeScript。 JavaScript的数组includes()函数自ECMA6起有效。但是,当我将lib
中的tsconfig
参数设置为"es6"
时,以下代码会在控制台浏览器中引发非致命错误。
['alpha', 'beta', 'gamma'].includes('alpha');
非致命错误:
[default] /foo/bar.component.ts:157:28
Property 'includes' does not exist on type 'string[]'.
有一个简单的解决方案。将lib
中的tsconfig
参数更改为es7
会使控制台中的错误无效。一切都很好。
然而,PhpStorm 2016.3.2无法识别解决方案。我继续收到类型提示错误,并显示以下消息:
TS2339: Property 'includes' does not exist on type 'string[]'.
如何让PhpStorm认识到includes()
的使用是否有效?
答案 0 :(得分:2)
我不确定是什么导致PhpStorm
以这种方式行事,但还有另一种解决方案,它不要求你使用es7
lib。
您可以填充此定义:
interface Array<T> {
includes(item: T, fromIndex?: number): boolean;
}
如果您的环境支持这种方法,那么您很高兴 如果您使用的是模块系统,则需要执行以下操作:
declare "global" {
interface Array<T> {
includes(item: T, fromIndex?: number): boolean;
}
}
要使用全局语法,将declare "global" { ... }
放在一个文件中,让我们使用你的名字:polyfills.ts
但你需要有一个虚拟导出,以便编译器将其编译为模块,所以:
export {};
declare "global" {
...
}
然后,无论您需要它,只需导入如下:
import "./polyfills";
它应该有用。
答案 1 :(得分:0)
PHPStorm问题有两个修复方法。
core-js-DefinitelyTyped
库。tsconfig
lib
值保留为es7
并将其代码添加到polyfills.ts
,则两个PHPStorm中的类型提示错误都将得到解决。