首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用TypeScript,而Object.assign给我一个错误“属性‘赋值’在类型‘ObjectConstructor’上不存在”

使用TypeScript,而Object.assign给我一个错误“属性‘赋值’在类型‘ObjectConstructor’上不存在”
EN

Stack Overflow用户
提问于 2016-08-10 04:48:33
回答 2查看 77.8K关注 0票数 46

我正在重新写我的问题,因为之前它没有什么意义,我也不是很清楚。

我正在从API接收数据,如下所示:

代码语言:javascript
复制
{"photos":[{"id":1,"title":"photo_1_title"}]}

因此,在我的代码中,我有一个photos变量和一个名为getPhotos()的方法

我使用无限滚动,所以当我到达页面底部时,我再次调用getPhotos()

代码语言:javascript
复制
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设置为

代码语言:javascript
复制
{"photos":[{"id":1,"title":"photo_1_title"}, {"id":2,"title":"photo_2_title"}]}

有没有人能帮我解释一下

jsfiddle.net/ca46hLw9不工作?我认为assign应该是将对象的内容合并在一起,对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-10 05:01:30

Object.assign是一项ECMAScript2015功能,在ECMAScript5及更低版本中不存在。

您最有可能的目标是为ECMAScript5编译您的Typescript,因此对象接口没有定义assign

您可以通过使用以下命令更改TS编译器配置来确定ECMAScript2015的目标

target: 'es6'

或者您可以使用assign方法扩展ObjectConstructor接口

代码语言:javascript
复制
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)

票数 82
EN

Stack Overflow用户

发布于 2019-07-17 15:33:28

对于typescript 2.0或更高版本,只需修改tsconfig.json文件,使"lib“部分包含"es6":

代码语言:javascript
复制
"lib": [
  "es5",
  "es6",
  "dom",
  "es2015.collection"
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38860161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档