Javascript 使用TypeScript和Object.assign会给我一个错误";财产';分配';不存在于类型';ObjectConstructor'&引用;

Javascript 使用TypeScript和Object.assign会给我一个错误";财产';分配';不存在于类型';ObjectConstructor'&引用;,javascript,typescript,Javascript,Typescript,我再次写我的问题,因为早些时候它没有什么意义,我不是很清楚 我从API接收的数据如下所示: {"photos":[{"id":1,"title":"photo_1_title"}]} 因此,在我的代码中,我有一个photos变量和一个名为getPhotos() 我使用的是无限滚动,所以当我到达页面底部时,我再次调用getPhotos() photos: any; getPhotos() { this.photoService.getPhotos() .subscribe(

我再次写我的问题,因为早些时候它没有什么意义,我不是很清楚

我从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应该把一个对象的内容合并在一起,对吗

Object.assign
是ECMAScript 2015的一项功能,在ECMAScript 5及更低版本中不存在

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

您可以通过使用更改TS编译器配置以ECMAScript 2015为目标

目标:“es6”

或者您可以使用方法
assign

declare interface ObjectConstructor {
    assign(...objects: Object[]): Object;
}
(您可以在任何地方添加此声明,重新声明接口将扩展它,而不是覆盖它)

或者,您可以将
对象
强制为
任何
并忽略其键入:

(

作为最终选项,您可以考虑使用库作为LADASH或jQuery,它们有自己的实现“代码>对象”。赋值(称为<代码>扩展< /代码>)

或更高,您可以使用对象扩展语法代替。
let obj = { x: 1, y: "string" };
var newObj = {...obj, z: 3, y: 4}; // { x: number, y: number, z: number }
指定排列操作的顺序决定了哪些属性 在结果对象中结束;后期排列中的属性“赢出” 超过以前创建的属性


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


扩展的objectconstructor会充当polyfill吗?嗨,我想知道我是否做错了什么。我使用简单对象{a:1}进行测试,并尝试执行
const test=object.assign({a:1},{b:2});
但当我
console.log(test);
时,我只看到
{b:2}
@user1354934这是因为您正在尝试进行深度克隆(对象中的对象).Object.assign显然只进行浅层克隆。请参阅MDN文档中的第二个示例:稍晚,但我认为Angular 2可以进行polyfill对象.assign-至少在使用Angular CLI的情况下是这样。有一个src/polyfills.ts文件,其中包含对core js/es6/Object的引用,而该文件又似乎包含该对象。assign polyfill。例如:
const opts={…默认值,…选项}
new
表达式创建
obj
时,它是不同的。不幸的是,当“obj”为常量时,这将不起作用。否则,这是一个好的解决方案。
"lib": [
  "es5",
  "es6",
  "dom",
  "es2015.collection"
]