翻译一下:Object
对象上不存在values
属性
实际上,Object.values
这个API属于ES2017
即,此时要求,TS编译器需要包含ES2017以上的API,才能够编译通过。
那么,默认情况下,TS会以Javascript(ECMAScript)哪个版本的API为基础呢?
TypeScript includes a default set of type definitions for built-in JS APIs (like Math), as well as type definitions for things found in browser environments (like document). TypeScript also includes APIs for newer JS features matching the target you specify; for example the definition for Map is available if target is ES6 or newer.
以上是官方描述,简单来说,默认情况下,会智能的根据tsconfig.json
文件中compilerOptions.target
来判断。target代表TS编译后输出的Javascript版本。
不难想象,如果target
是es2017,那么自然TS编译器就会包含Object.values
这个API。但实际情况下,考虑到兼容问题,一般我们打包输出的是ES5。
即,编译的Javascript API是基于ES5的,不存在Object.values
,所以就会出现标题中的错误。
此时,就需要另外一个选项:ComplierOtions.lib
,指当前编译环境依赖的类库。可以参考官方文档查看对应的枚举值。或者类似于如下的设置即可:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "esnext"],
...
``}`