首页 > 解决方案 > 设置任何 javascript 对象属性的类型

问题描述

我有以下 javascript 对象

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

    ]...

然后稍后在我的代码中更改对象:

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

为了使图像查看器工作,我只需要图像的 url,而不是图像 url 所属的键。因此,我将键中的内容设置为键值,即图像 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'.

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

标签: javascriptangulartypescriptcastingtypescript-typings

解决方案


这是您尝试执行的类型安全版本:

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;

推荐阅读