设置任何javascript对象属性

时间:2018-05-31 16:35:50

标签: javascript angular typescript casting typescript-typings

我有以下javascript对象

 venue = {
    id: 0,
    name: '',
    venueimage_set: [
      {
        imageurl: '',
      },

    ]...

然后在我的代码中我改变了对象:

 this.venue.venueimage_set[+image] = this.venue.venueimage_set[+image].imageurl;

要使图像查看器工作,我需要图像的网址而不是图像网址所属的关键字。所以我在键中取了什么,并将数组位置设置为键值,即图像URL。

然后我收到了这个声音。

ERROR in mainroot/venuepage/venuepage.component.ts(171,25): error TS2322: Type 'string' is not assignable to type '{ imageurl: string; }'. mainroot/venuepage/venuepage.component.ts(175,127): error TS2339: Property 'imageurl' does not exist on type 'string'.

我希望打字稿忽略输入,让我这样做。我怎么样?

1 个答案:

答案 0 :(得分:2)

以下是您尝试执行的操作的类型安全版本:

function toVenue<T>({id, name, venueimage_set}: T) {
  return {
    id,
    name,
    venueImageSet: venueimage_set.map(el => el.imageurl)
  };
}

设置venue

时可以使用哪个
const venue = toVenue({
    id: 0,
    name: '',
    venueimage_set: [{
       imageurl: '',
    }]
});

这里是不安全的版本(请不要这样做):

this.venue.venueimage_set[+image] = this.venue.venueimage_set[+image].imageurl as any;