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