TypeScript --lib参数中ES2018系列选项的区别及相关问题
嘿,这个问题问到点子上了,我来给你把TypeScript里这些--lib参数的门道讲清楚:
一、ES2018、ES2018.Promise、ES2018.RegExp的核心区别
ES2018:这是个「全家桶」选项,包含了ES2018标准下所有内置API、语法特性的类型声明文件。比如异步迭代器、对象的Rest/Spread属性、Promise.finally()、正则的dotAll标志这些ES2018的新特性,都会被一次性引入。ES2018.Promise:这是个精准的子集,只聚焦ES2018中Promise的新增特性——说白了就是专门为Promise.finally()提供类型定义,不会碰ES2018其他模块的内容(比如正则的新特性、异步迭代器这些)。ES2018.RegExp:和上面的Promise子集对应,它只包含ES2018里正则表达式的新增特性声明,比如后行断言、dotAll模式这些正则相关的类型和API,和Promise的内容完全不交叉。
二、仅需Promise.finally()支持的最优选择
如果你的需求非常明确:只需要让代码支持Promise.finally(),不需要其他ES2018特性,那直接选ES2018.Promise就对了。这样做既能满足你的需求,又能最小化引入的声明范围,避免不必要的类型定义,甚至能减少一些潜在的类型兼容问题。
三、ES2018相关lib的支持起始版本
TypeScript从3.0版本开始才正式加入了ES2018相关的--lib选项。这就是为什么你在TS 2.6.2里会碰到那个TS6046错误——这个版本还没支持ES2018的库声明,它能识别的--lib参数最高只到ES2017,所以你输入ES2018相关的选项自然会报错。
内容的提问来源于stack exchange,提问作者Alexander Abakumov
相关产品推荐
相关产品推荐

