PhpStorm中的ES7类型提示失败

时间:2017-01-05 17:19:02

标签: javascript typescript phpstorm

我在我的项目中使用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()的使用是否有效?

2 个答案:

答案 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问题有两个修复方法。

  1. 向PHPStorm的框架添加新库。最简单的解决方案是转到PHPStorm&gt;偏好&gt;语言与框架&gt; JavaScript&gt;库并添加core-js-DefinitelyTyped库。
  2. 如果这不起作用,您可以修改Nitzan Tomer的解决方案。如果您将tsconfig lib值保留为es7并将其代码添加到polyfills.ts,则两个PHPStorm中的类型提示错误都将得到解决。