目标ES5的core-js和Typescript允许使用不受支持的ES6功能

时间:2017-02-05 11:04:18

标签: typescript definitelytyped

我有一个使用"target": "es5"编译的TypeScript项目。我使用core-js' Set所以我在我的项目中安装了core-js和@ types / core-js。 但是,由于core-js d.ts包含SetMap(以及其他ES6功能)的全局声明,因此TypeScript编译器允许我使用它们,这显然不会起作用旧的浏览器。

我无法从构建中排除core.d.ts,因为我显然需要接口。

编译器是否有办法阻止我使用ES6功能并仍使用core-j及其相应的类型定义?

1 个答案:

答案 0 :(得分:0)

由于core-js是一个polyfill,它的声明旨在修改全局范围。我建议你找到或创建自己的set接口声明,这很简单。 绝对删除@ types / core-js包。

您可以使用的声明看起来像

declare module "core-js/library/fn/set" {
  class Set { ... }
  export = Set;
}

请注意,这是一个环境外部模块声明,其名称与您的加载程序或节点的require函数解析的实际JavaScript文件的导入路径相匹配。

应尽可能避免环境外部模块声明,因为它们都有助于环境外部模块的全局命名空间,但在这种情况下很难避免。

可以避免使用的一种方法是使用tsconfig.json中的路径配置。

<强>路径到非环境-declaration.ts

class Set { ... }
export = Set;

<强> tsconfig.json

{
  "compilerOptions": {
     "baseUrl": "",
     "paths": {
       "core-js/library/fn/set": [
         "path-to-non-ambient-declaration"
        ]
      }
    }
  }
}