将json值转换为枚举值
我喜欢将json字符串值转换为enum,这样它就可以在html页面上显示/呈现自定义字符串。 错误消息:类型“{id:number;名称:string;状态:string;}[]”不能分配给类型“status[]” 我有这样一个json记录:将json值转换为枚举值,json,angular,typescript,serialization,enums,Json,Angular,Typescript,Serialization,Enums,我喜欢将json字符串值转换为enum,这样它就可以在html页面上显示/呈现自定义字符串。 错误消息:类型“{id:number;名称:string;状态:string;}[]”不能分配给类型“status[]” 我有这样一个json记录: { id: 1, name: 'Some name', status: 'STATUS01' }, status.enum.ts export enum Status { 'STATUS01' = 'Operational', 'STATUS02
{ id: 1, name: 'Some name', status: 'STATUS01' },
status.enum.ts
export enum Status {
'STATUS01' = 'Operational',
'STATUS02' = 'Some other status'
}
该枚举用于模型中
import { Status } from './status.enum';
export class ServiceState {
id: number;
name: string;
status: Status;
}
服务中有一个检索所有状态(虚拟数据)的功能:
getStatuses():可观察{
常数响应=[
{id:1,名称:'One',状态:'STATUS01'},
{id:2,名称:'2',状态:'STATUS01'},
{id:3,名称:'OneTwo',状态:'STATUS02'},}
];
回复(回复);
}
返回抛出错误您应该实际使用枚举值:
export enum Status {
STATUS01 = 'Operational',
STATUS02 = 'Some other status'
}
const response = [
{ id: 1, name: 'One', status: Status.STATUS01 },
{ id: 2, name: 'Two', status: Status.STATUS01 },
{ id: 3, name: 'OneTwo', status: Status.STATUS02 },
// ...
];
如果要映射枚举中的值:
getStatuses(): Observable<ServiceState[]> {
const response = [
{ id: 1, name: 'One', status: 'STATUS01' },
{ id: 2, name: 'Two', status: 'STATUS01' },
{ id: 3, name: 'OneTwo', status: 'STATUS02' },
];
return of(response).pipe(
map((states) => states.map((state) => ({
...state,
status: Status[state.status]
} as ServiceState)
);
}
getStatuses():可观察{
常数响应=[
{id:1,名称:'One',状态:'STATUS01'},
{id:2,名称:'2',状态:'STATUS01'},
{id:3,名称:'OneTwo',状态:'STATUS02'},
];
返回(响应)。管道(
映射((状态)=>states.map((状态)=>({
状态
状态:状态[状态.状态]
}作为服务状态)
);
}
我仍然不理解您的问题,但是您可能需要映射API的响应以匹配您的类类型
服务
public getStatuses():可观察{
返回此.http.get('url').pipe(
映射(data=>data.forEach(item=>{
item.status=状态[item.status];
}))
);
}
如果您只使用类来声明类型,那么一个简单的接口就足够了。请添加引发错误的代码。webapi将返回一个STATUS01(字符串)not Status.STATUS01。这是一些虚假数据。@Babulaas如果您键入的数据不正确,或者您必须映射响应中的值,我必须映射这些值。我度过了漫长的一天。谢谢您的修复。@Babulaas,但荷兰现在还不到下午4点:D,您应该尽量少工作,否则您的生产率会下降太多!
getStatuses(): Observable<ServiceState[]> {
const response = [
{ id: 1, name: 'One', status: 'STATUS01' },
{ id: 2, name: 'Two', status: 'STATUS01' },
{ id: 3, name: 'OneTwo', status: 'STATUS02' },
];
return of(response).pipe(
map((states) => states.map((state) => ({
...state,
status: Status[state.status]
} as ServiceState)
);
}