use*_*943 45 javascript typescript ecmascript-6 angular es2017
我正在研究ng2实现.我正在使用以下函数调用将对象转换为数组:
var authors = Object.entries(responseObject.Authors);
Run Code Online (Sandbox Code Playgroud)
这是标准的js功能.但是,ts编译器返回以下错误:
"Property 'entries' does not exist on type 'ObjectConstructor'"
Run Code Online (Sandbox Code Playgroud)
基于快速谷歌,似乎解决方案可能是将compilerOptions目标属性从es5更改为es6.但是,在之前的一个问题的一些先前的研究之后,我认为我能够通过在我的tsconfig.json上包含额外的"lib"属性来利用es6功能:
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": false,
"outDir": "../Scripts/",
"removeComments": false,
"sourceMap": true,
"target": "es5",
"moduleResolution": "node",
"lib": [
"es2015",
"dom"
]
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将目标属性更改为es2015,然后重建项目并执行"typescriptUsingTsConfig",但我仍然得到相同的错误.知道我可以在这里做什么来利用Object.entries()函数?
Alu*_*dad 78
你是非常正确的,改变target
是错误的方法,改变lib
是正确的方法,但是你已经指定了错误的语言版本.根据MDN,Object.entries
正式添加在ES2017规范中.
"lib": ["es2017"]
Run Code Online (Sandbox Code Playgroud)
因此,你必须指定*.
如果您只想添加 ES2017 Object
中添加的函数方法的声明,TypeScript允许您指定更精细的值
"lib": ["es2017.object"]
Run Code Online (Sandbox Code Playgroud)
正如Alexander Bird所述,默认情况下,该"lib"
选项的隐含值取决于为"target"
if表示的值.
例如:
"target": "es2017"
Run Code Online (Sandbox Code Playgroud)
"lib.*"
除非"lib"
明确指定,否则将默认包含相应的前缀.
请注意,您可能希望添加实现本身的polyfill,例如此实现,以确保它在较旧的运行时中有效.
注意:作为替代方案,您可以指定任何更高版本
"lib": ["es2020"]
Run Code Online (Sandbox Code Playgroud)
或者自然甚至
"lib": ["esnext"]
Run Code Online (Sandbox Code Playgroud)
最后一个将包括TypeScript语言已知的最新标准库功能的声明.因为它代表一个移动目标,所以应该谨慎使用此选项,因为根据定义,填充所有相应的运行时是一项复杂的任务,需要进行研究,并且可能涉及根据目标运行时加载不同的polyfill.
注意: 一些评论者问为什么改变"lib"
而不是--target
因为两者都能使代码进行类型检查?原因是--lib
改变了代码的编译方式.例如,--target
意味着"target": "es2017"
不会为较旧的运行时转换函数.这是不正确的,因为其意图是允许使用其他库,而不是更改输出语法,并且重要的是不要使用库功能完成语法功能.
Hie*_*yen 17
接受的答案对我不起作用,但我改编了来自“ObjectConstructor”类型不存在属性“assign”的答案,如下所示:
const changedFields = (<any>Object).entries(this.ngForm.form.controls)
.filter(value => value[1].dirty);
Run Code Online (Sandbox Code Playgroud)
分享给有同样情况的人
归档时间: |
|
查看次数: |
22286 次 |
最近记录: |