Javascript Typescript将JSON转换为字符串类型字符串不能分配给Type=';{..}';

Javascript Typescript将JSON转换为字符串类型字符串不能分配给Type=';{..}';,javascript,typescript,vue.js,Javascript,Typescript,Vue.js,我有以下代码: interface ISource extends IdModel { source_type_id: number; network_id: number; company_connection_id: number; feed_id: number; connection_id: number; feed_ids: number[]; name: string; tag: string; additional_data: ISourceDa

我有以下代码:

interface ISource extends IdModel {
  source_type_id: number;
  network_id: number;
  company_connection_id: number;
  feed_id: number;
  connection_id: number;
  feed_ids: number[];
  name: string;
  tag: string;
  additional_data: ISourceData;
  default_user_image?: File;
  hasNewImage?: boolean;
  next_update?: string;
  post_field_overrides?: {
    user_full_name?: string;
    user_screen_name?: string;
    url?: string;
    network_id?: number;
  };
}

save() {
   //converting this to string because I am saving this in my database.
   this.source.post_field_overrides = JSON.stringify(this.source.post_field_overrides);

}
如果不将其转换为字符串,则保存在数据库中的值是
[Object Object]

如果我还将其转换为字符串,则会收到以下错误/警告:

TS2322: Type 'string' is not assignable to type '{ user_full_name?: string | undefined; user_screen_name?: string | undefined; url?: string | undefined; network_id?: number | undefined; } | undefined'.

请问有什么帮助吗?提前谢谢

this.source.post\u field\u overrides=JSON.stringify(this.source.post\u field\u overrides)

您已将post_字段_覆盖定义为包含

{
    user_full_name?: string;
    user_screen_name?: string;
    url?: string;
    network_id?: number;
  }
在您的typescript界面中。现在,您想用字符串替换同一个属性。这将无法通过typescript的静态类型检查

如果需要它是字符串,请在接口中添加另一个属性

或者正如Alexei Levenkov所说,使用它来支持对象和字符串

post_field_overrides?: string | {
    user_full_name?: string;
    user_screen_name?: string;
    url?: string;
    network_id?: number;
  };

您正在将
post\u字段\u覆盖
声明为对象

 post_field_overrides?: {
    user_full_name?: string;
    user_screen_name?: string;
    url?: string;
    network_id?: number;
  };
如果需要将其用作字符串,则需要声明为:

 post_field_overrides?: string;

post\u field\u overrides?
既不是字符串也不是任何。。。你应该决定你想要它是什么,然后写下我想…你试过这个吗?:JSON.stringify(JSON.parse(this.source.post_field_overrides));这个真的很好!谢谢你!另一个问题是,当我从数据库中检索数据时,因为它是一个字符串,所以我必须
JSON.parse()。这就是我解析它的方式-
This.source.post\u field\u overrides=JSON.parse(This.source.post\u field\u overrides),问题是我再次遇到错误
TS2345:type'string |
的参数-怎么做?我猜当您使用JSON.parse将字符串解析为对象时,typescript类型检查只会将其视为JSON对象,而不是您在界面中定义的type
{user\u full\u name:…}
。因此,您可能需要将此类型定义抽象为一个独立的类型PostFieldOverride,在接口中使用它,并在此处使用
JSON.parse(this.source.post\u field\u overrides)作为PostFieldOverride