我正在重新写我的问题,因为之前它没有什么意义,我也不是很清楚。
我正在从API接收数据,如下所示:
{"photos":[{"id":1,"title":"photo_1_title"}]}
因此,在我的代码中,我有一个photos
变量和一个名为getPhotos()
的方法
我使用无限滚动,所以当我到达页面底部时,我再次调用getPhotos()
。
photos: any;
getPhotos() {
this.photoService.getPhotos()
.subscribe(
photos => this.photos = photos
// here, instead of doing this, I want to add the array of photos I get back to this.photos using Object.assign however it is giving me the said error
)
}
因此,如果下一次调用它时,我返回{"photos":[{"id":2,"title":"photo_2_title"}]}
,那么我会尝试将this.photos
设置为
{"photos":[{"id":1,"title":"photo_1_title"}, {"id":2,"title":"photo_2_title"}]}
有没有人能帮我解释一下
jsfiddle.net/ca46hLw9不工作?我认为assign应该是将对象的内容合并在一起,对吧?
发布于 2016-08-10 05:01:30
Object.assign
是一项ECMAScript2015功能,在ECMAScript5及更低版本中不存在。
您最有可能的目标是为ECMAScript5编译您的Typescript,因此对象接口没有定义assign
。
您可以通过使用以下命令更改TS编译器配置来确定ECMAScript2015的目标
target: 'es6'
或者您可以使用assign
方法扩展ObjectConstructor接口
declare interface ObjectConstructor {
assign(...objects: Object[]): Object;
}
(您可以将此声明添加到任何地方,重新声明接口将扩展它而不是覆盖它)
或者,您可以将Object
强制为any
,并忽略其类型:
(<any>Object).assign( this.photos, photos )
无论您选择哪一个,请记住,如果您希望在较旧的浏览器上运行此功能,则需要添加polyfill。大多数现代浏览器都相当接近于实现ES2015功能集,但它们并不是100%实现,这意味着如果您依赖ES2015功能,代码的某些部分仍然会失败。
当以ES5或更早的版本为目标时,Typescript将不会多填充Object.assign
,这就是为什么你会得到这个错误的原因。另一方面,Babel确实有插件形式的多重填充,这意味着您需要将Babel转译合并到您的构建管道中,请参阅:https://babeljs.io/docs/plugins/transform-object-assign/
作为最后一种选择,您可以考虑使用库作为Lodash或jQuery,它们有自己的Object.assign
实现(称为extend
)
发布于 2019-07-17 15:33:28
对于typescript 2.0或更高版本,只需修改tsconfig.json文件,使"lib“部分包含"es6":
"lib": [
"es5",
"es6",
"dom",
"es2015.collection"
]
https://stackoverflow.com/questions/38860161
复制相似问题