首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核-js和带有目标ES5的类型记录允许使用不受支持的ES6特性。

核-js和带有目标ES5的类型记录允许使用不受支持的ES6特性。
EN

Stack Overflow用户
提问于 2017-02-05 11:04:18
回答 1查看 1.3K关注 0票数 2

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

我不能将core.d.ts排除在构建之外,因为我显然需要它作为接口。

编译器是否有办法阻止我使用ES6特性,并且仍然使用core-js及其相应的类型定义?

EN

回答 1

Stack Overflow用户

发布于 2017-02-05 12:17:34

由于core-js是一个多填充的,所以它的声明被设计用来修改全局范围。我建议您找到或创建自己的set接口声明,它相当简单。绝对删除@type/core-js包。

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

代码语言:javascript
复制
declare module "core-js/library/fn/set" {
  class Set { ... }
  export = Set;
}

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

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

避免这种情况的一种方法是使用tsconfig.json中的路径配置。

path-to-non-ambient-declaration.ts

代码语言:javascript
复制
class Set { ... }
export = Set;

tsconfig.json

代码语言:javascript
复制
{
  "compilerOptions": {
     "baseUrl": "",
     "paths": {
       "core-js/library/fn/set": [
         "path-to-non-ambient-declaration"
        ]
      }
    }
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42051264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档