我有一个TypeScript项目,它是用"target": "es5"编译的。我使用core-js的Set,所以在我的项目中安装了core-js和@type/core-js。但是,由于核心js d.ts包含了Set和Map (以及其他ES6特性)的全局声明,TypeScript编译器允许我使用它们,这显然不能在旧浏览器中工作。
我不能将core.d.ts排除在构建之外,因为我显然需要它作为接口。
编译器是否有办法阻止我使用ES6特性,并且仍然使用core-js及其相应的类型定义?
发布于 2017-02-05 12:17:34
由于core-js是一个多填充的,所以它的声明被设计用来修改全局范围。我建议您找到或创建自己的set接口声明,它相当简单。绝对删除@type/core-js包。
您可以使用的声明看起来像
declare module "core-js/library/fn/set" {
class Set { ... }
export = Set;
}请注意,这是一个环境外部模块声明,其名称与加载程序或节点的require函数解析的实际JavaScript文件的导入路径相匹配。
应尽可能避免环境外部模块声明,因为它们都会导致环境外部模块的全局命名空间,但在这种情况下很难避免。
避免这种情况的一种方法是使用tsconfig.json中的路径配置。
path-to-non-ambient-declaration.ts
class Set { ... }
export = Set;tsconfig.json
{
"compilerOptions": {
"baseUrl": "",
"paths": {
"core-js/library/fn/set": [
"path-to-non-ambient-declaration"
]
}
}
}
}https://stackoverflow.com/questions/42051264
复制相似问题