À l'aide de la Machine, et de l'Objet.attribuer me donne une erreur “propriété "assigner" n'existe pas sur le type "ObjectConstructor'”
Je suis en train d'écrire ma question encore une fois parce que plus tôt, il n'a guère de sens et je n'étais pas très clair.
Je suis la réception de données à partir de l'API qui ressemble à quelque chose comme ceci:
{"photos":[{"id":1,"title":"photo_1_title"}]}
Donc, dans mon code, j'ai un photos
variable, et une méthode appelée getPhotos()
Je suis en utilisant infini défilement donc quand j'arrive en bas de la page, j'appelle getPhotos()
de nouveau.
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
)
}
Donc si la prochaine fois que je l'appelle, je serai de retour {"photos":[{"id":2,"title":"photo_2_title"}]}
, alors je suis en train de mettre this.photos
être
{"photos":[{"id":1,"title":"photo_1_title"}, {"id":2,"title":"photo_2_title"}]}
quelqu'un peut m'aider avec pourquoi
jsfiddle.net/ca46hLw9 ne fonctionne pas? J'ai pensé à attribuer est censé fusionner le contenu d'un objet de droit?
Vous devez vous connecter pour publier un commentaire.
Object.assign
est un ECMAScript2015 fonction et n'existe pas dans ECMAScript5 et inférieur.Vous êtes le plus susceptible de ciblage pour compiler votre Tapuscrit pour ECMAScript5 et à cet effet, l'interface d'un Objet n'a pas
assign
défini.Vous pouvez soit la cible ECMAScript2015 en changeant votre TS compilateur de configuration avec
target: 'es6'
ou vous pouvez étendre la ObjectConstructor interface avec la méthode
assign
(vous pouvez ajouter cette déclaration n'importe où, redeclaring une interface étend plutôt que de l'écraser)
Ou vous pouvez forcer
Object
àany
et d'ignorer ses tapant:(<any>Object).assign( this.photos, photos )
Selon que vous choisissez, gardez à l'esprit que si vous voulez que cela fonctionner sur les anciens navigateurs, vous devez ajouter un polyfill. La plupart des navigateurs modernes sont assez proches de la mise en œuvre de la ES2015 ensemble de fonctionnalités, mais ils ne sont pas à 100% là, ce qui signifie que certaines parties de votre code va encore échouer si vous comptez sur ES2015 fonctionnalité.
Tapuscrit sera pas polyfill
Object.assign
quand cibler ES5 ou plus, c'est pourquoi vous obtenez cette erreur. D'autre part, Babel n'ont polyfills sous la forme de plugins, ce qui signifie que vous devez intégrer Babel transpilation dans votre build pipeline, voir: https://babeljs.io/docs/plugins/transform-object-assign/Comme une dernière option que vous pouvez envisager d'utiliser une bibliothèque comme Lodash ou jQuery, qui ont leur propre mise en œuvre de
Object.assign
(appeléextend
)const test = Object.assign({ a: 1}, {b: 2});
mais quand jeconsole.log(test);
je ne vois que{b: 2}
Avec Tapuscrit 2.1 ou plus, vous pouvez utiliser l'Objet de la propagation de la syntaxe à la place.
const opts = { ...defaults, ...options }
obj
est créé à partir d'unnew
expression.Pour tapuscrit de la version 2.0 ou supérieur, juste modifier le tsconfig.fichier json afin que la "lib de la section" comprend "es6":