TypeScript版本:3.8.3
搜索词:lib target dependencies triple-slash
代码
我在https://github.com/astorije/repro-tsc-lib-issue有一个复现仓库。
请考虑以下代码:
console.log(Object.values({ foo: BigInt(42) }));
Object.values
是一个ES2017特性,而BigInt
是一个ES2020特性。
还请考虑target
是tsconfig.json
,es2015
是lib
,而es2015
和dom
要么没有指定,要么只包含它们。
预期行为:
给定上述代码和TS配置,类型检查器应该总是失败:
index.ts:2:20 - error TS2339: Property 'values' does not exist on type 'ObjectConstructor'.
2 console.log(Object.values({ foo: BigInt(42) }));
~~~~~~
index.ts:2:34 - error TS2304: Cannot find name 'BigInt'.
2 console.log(Object.values({ foo: BigInt(42) }));
~~~~~~
如果你只有typescript
作为package.json
的依赖项,那就是事实。目前为止,一切正常。查看我的复现仓库的expected
文件夹。
实际行为:
如果你有一个(直接或间接)对@types/node
的依赖,或者如果任何依赖项包含一个声明文件,该文件具有/// <reference lib="es2018" />
、/// <reference lib="es2020.bigint" />
等,那么类型检查器现在将不再报告这些错误。查看我的复现仓库的actual
文件夹。
这对我来说似乎很重要,因为这意味着依赖项可以消除潜在的浏览器不兼容性。如果我指定了一个target
的es2015
,没有额外的lib
、Babel转换或polyfills,我应该无法编译上面的代码。
我是不是漏掉了什么显而易见的东西?我知道这是lib
的设计,但正如在#15732中解释的那样,这假设项目使用polyfills,这是第三方库无法在编译时强制/检查的内容。
相关问题:
对于搜索词的模糊性表示歉意。这个问题非常重要,肯定已经存在于一个问题或StackOverflow问题中,但在花了一些时间查找后,我没有找到任何类似的问题。
唯一看起来有些相关的一些问题,但又有所不同:
2条答案
按热度按时间hts6caw31#
我前几天在Stack Overflow上发布了这个问题:https://stackoverflow.com/q/62087887/4776939
vptzau2j2#
请考虑为用户提供配置以覆盖类型引用。
例如,在tsconfig.json中: