为什么属性在他的父对象之外添加?
Why is the property added outside his parent in Object?
我有一个这样声明的接口:
Sejour.ts
import { SejourItem } from './SejourItem';
export interface Sejour {
dsAdvSejour: DsAdvSejour;
}
interface DsAdvSejour {
'prods:hasChanges': any;
ttSejour: SejourItem[];
'prods:before': any;
}
其中包含一个 SejourItem 数组:
SejourItem.ts
export interface SejourItem {
'prods:rowState'?: string;
ROWID: string;
Sequence: number;
NoSejour: string;
NomPatient: string;
NoPatient: string;
DateNaissance: Date | string;
SexePatient: string;
CodePostal: string;
OrgAssur1: string;
Statut: string;
DateDebutSejour: Date | string;
DateFinSejour: Date | string;
CodeReadmission: string;
Adresse: string;
MotifAdmissionAdm: string;
CodeAdresseParAdm: string;
TypeSortieAdm: string;
CodeDestinationAdm: string;
TypePatient: string;
TypeAdmission: string | null;
TypeSejour: number;
CodePays: string;
HeureDebutSejour: string;
HeureFinSejour: string;
MinuteDebutSejour: string;
MinuteFinSejour: string;
SejourCloture: boolean;
NumerosPrestataires: string;
CodeNationalite: string;
NoSejourMaman: string;
SiteAdmission: string;
LieuAvantAdmission: string;
NbJoursReadmission: string;
CodeAssociation: string;
TypeAssociation: string;
CodeAssurabiliteRHM: string;
PatientVIP: string;
}
如您所见,我有一个名为 prods:rowState
的可选 属性。
此值可以创建、更新或删除。
我有一个简单的功能,可以处理这些情况:
private prepareBody(stayToPrepare: SejourItem, query: string, stayBefore?: SejourItem): Sejour {
query = query.toUpperCase();
let preparedStay: Sejour = {} as Sejour;
switch (query) {
case 'POST':
stayToPrepare['prods:rowState'] = 'created';
preparedStay = {
dsAdvSejour: {
'prods:hasChanges': true,
ttSejour: [stayToPrepare],
'prods:before': {},
},
};
break;
//Other cases...
}
return preparedStay;
}
所以当我想实现一个post请求时,它定义了prods:rowState
到'created',returns一个干净的Sejour对象,我post 到我的后端。
这是我的问题:
当我 console.log(JSON.stringify(preparedState, null, 2))
时,这就是我得到的:
{
"dsAdvSejour": {
"prods:hasChanges": true,
"ttSejour": [
{
"sejourItem": { // Why do I have a key ? I was added in an array...
"ROWID": "",
"Sequence": 0,
"NoSejour": "",
"NomPatient": "",
"NoPatient": "",
"DateNaissance": "2021-03-30",
"SexePatient": "",
"CodePostal": "",
"OrgAssur1": "",
"Statut": "",
"DateDebutSejour": "2021-03-30",
"DateFinSejour": "2021-03-30",
"CodeReadmission": "",
"Adresse": "",
"MotifAdmissionAdm": "",
"CodeAdresseParAdm": "",
"TypeSortieAdm": "",
"CodeDestinationAdm": "",
"TypePatient": "",
"TypeAdmission": "",
"TypeSejour": 0,
"CodePays": "",
"HeureDebutSejour": "0",
"HeureFinSejour": "0",
"MinuteDebutSejour": "0",
"MinuteFinSejour": "0",
"SejourCloture": false,
"NumerosPrestataires": "",
"CodeNationalite": "",
"NoSejourMaman": "",
"SiteAdmission": "",
"LieuAvantAdmission": "",
"NbJoursReadmission": "",
"CodeAssociation": "",
"TypeAssociation": "",
"CodeAssurabiliteRHM": "",
"PatientVIP": ""
},
"prods:rowState": "created" // Why am I added here ? I'm a SejourItem property...
}
],
"prods:before": {}
}
}
只要我完全不明白为什么会这样,我就用类似的说明做了一个stackblitz。而且我更不明白为什么它在 stackblitz 中能正常工作。
有人知道发生了什么吗?如果是,我很高兴知道我在这里遗漏了什么。
PS :我的代码最初是 运行 在 Angular 11 项目中,如果这可以帮助的话。
编辑:我的第一个想法是 TypeScript 错误,只要我不能在 StackBlitz 中重现该行为,使用相同的代码
非常感谢您的帮助和时间。
显然,传入的 stayToPrepare
参数不是 SejourItem
类型,而是 { sejourItem: SejourItem }
.
最好的方法当然是在调用 prepareBody
之前解决这个问题。也许是这样的:
this.prepareBody(stayToPrepare.sejourItem, query, stayBefore)
请确认我的假设是否正确
我有一个这样声明的接口:
Sejour.ts
import { SejourItem } from './SejourItem';
export interface Sejour {
dsAdvSejour: DsAdvSejour;
}
interface DsAdvSejour {
'prods:hasChanges': any;
ttSejour: SejourItem[];
'prods:before': any;
}
其中包含一个 SejourItem 数组:
SejourItem.ts
export interface SejourItem {
'prods:rowState'?: string;
ROWID: string;
Sequence: number;
NoSejour: string;
NomPatient: string;
NoPatient: string;
DateNaissance: Date | string;
SexePatient: string;
CodePostal: string;
OrgAssur1: string;
Statut: string;
DateDebutSejour: Date | string;
DateFinSejour: Date | string;
CodeReadmission: string;
Adresse: string;
MotifAdmissionAdm: string;
CodeAdresseParAdm: string;
TypeSortieAdm: string;
CodeDestinationAdm: string;
TypePatient: string;
TypeAdmission: string | null;
TypeSejour: number;
CodePays: string;
HeureDebutSejour: string;
HeureFinSejour: string;
MinuteDebutSejour: string;
MinuteFinSejour: string;
SejourCloture: boolean;
NumerosPrestataires: string;
CodeNationalite: string;
NoSejourMaman: string;
SiteAdmission: string;
LieuAvantAdmission: string;
NbJoursReadmission: string;
CodeAssociation: string;
TypeAssociation: string;
CodeAssurabiliteRHM: string;
PatientVIP: string;
}
如您所见,我有一个名为 prods:rowState
的可选 属性。
此值可以创建、更新或删除。
我有一个简单的功能,可以处理这些情况:
private prepareBody(stayToPrepare: SejourItem, query: string, stayBefore?: SejourItem): Sejour {
query = query.toUpperCase();
let preparedStay: Sejour = {} as Sejour;
switch (query) {
case 'POST':
stayToPrepare['prods:rowState'] = 'created';
preparedStay = {
dsAdvSejour: {
'prods:hasChanges': true,
ttSejour: [stayToPrepare],
'prods:before': {},
},
};
break;
//Other cases...
}
return preparedStay;
}
所以当我想实现一个post请求时,它定义了prods:rowState
到'created',returns一个干净的Sejour对象,我post 到我的后端。
这是我的问题:
当我 console.log(JSON.stringify(preparedState, null, 2))
时,这就是我得到的:
{
"dsAdvSejour": {
"prods:hasChanges": true,
"ttSejour": [
{
"sejourItem": { // Why do I have a key ? I was added in an array...
"ROWID": "",
"Sequence": 0,
"NoSejour": "",
"NomPatient": "",
"NoPatient": "",
"DateNaissance": "2021-03-30",
"SexePatient": "",
"CodePostal": "",
"OrgAssur1": "",
"Statut": "",
"DateDebutSejour": "2021-03-30",
"DateFinSejour": "2021-03-30",
"CodeReadmission": "",
"Adresse": "",
"MotifAdmissionAdm": "",
"CodeAdresseParAdm": "",
"TypeSortieAdm": "",
"CodeDestinationAdm": "",
"TypePatient": "",
"TypeAdmission": "",
"TypeSejour": 0,
"CodePays": "",
"HeureDebutSejour": "0",
"HeureFinSejour": "0",
"MinuteDebutSejour": "0",
"MinuteFinSejour": "0",
"SejourCloture": false,
"NumerosPrestataires": "",
"CodeNationalite": "",
"NoSejourMaman": "",
"SiteAdmission": "",
"LieuAvantAdmission": "",
"NbJoursReadmission": "",
"CodeAssociation": "",
"TypeAssociation": "",
"CodeAssurabiliteRHM": "",
"PatientVIP": ""
},
"prods:rowState": "created" // Why am I added here ? I'm a SejourItem property...
}
],
"prods:before": {}
}
}
只要我完全不明白为什么会这样,我就用类似的说明做了一个stackblitz。而且我更不明白为什么它在 stackblitz 中能正常工作。
有人知道发生了什么吗?如果是,我很高兴知道我在这里遗漏了什么。
PS :我的代码最初是 运行 在 Angular 11 项目中,如果这可以帮助的话。
编辑:我的第一个想法是 TypeScript 错误,只要我不能在 StackBlitz 中重现该行为,使用相同的代码
非常感谢您的帮助和时间。
显然,传入的 stayToPrepare
参数不是 SejourItem
类型,而是 { sejourItem: SejourItem }
.
最好的方法当然是在调用 prepareBody
之前解决这个问题。也许是这样的:
this.prepareBody(stayToPrepare.sejourItem, query, stayBefore)
请确认我的假设是否正确