我有一個帶有一些可選輸入的服務,這些輸入取決于呼叫服務的表單。如果我嘗試在沒有 sid 和 eid 輸入的情況下運行它,實際的 .add({}) 會出現關于欄位未定義的錯誤,這是有道理的。
不支持的欄位值:未定義(在檔案中的欄位 eventId 中找到
所以,我可以想出幾種使用各種運算式和 if 陳述句的方法,或者在服務上撰寫 2 種不同的變體,可以從不同的位置呼叫,但我希望有一個更優雅的解決方案。
有沒有簡單的方法,比如“?” 您可以在介面或輸入中使用來指示此欄位是可選的嗎?
比如:{ ...inventoryAdd, ...timestamp, ...?sessionId, ...?eventId }
或者,我是否只需要撰寫一些邏輯,或者將函式拆分為兩個?
addInventory(inventoryAdd: any, pid: string, sid?: string, eid?: any) {
const inventoryCollectionRef = this.afs.collection("/Party-Management/" pid "/Party-Inventory");
const timestamp = { timestamp: firebase.firestore.FieldValue.serverTimestamp() }
const sessionId = { sessionId: sid}
const eventId = { eventId: eid }
inventoryCollectionRef.add({ ...inventoryAdd, ...timestamp, ...sessionId, ...eventId })
}
uj5u.com熱心網友回復:
我可能只會使用if陳述句(但請繼續閱讀):
addInventory(inventoryAdd: any, pid: string, sid?: string, eid?: any) {
const inventoryCollectionRef = this.afs.collection("/Party-Management/" pid "/Party-Inventory");
const toAdd = {
...inventoryAdd,
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
};
if (sid) {
toAdd.sessionId = sid;
}
if (eid) {
toAdd.eventId = eid;
}
inventoryCollectionRef.add(toAdd);
}
但是如果你想用運算式來代替,傳播null是一個空操作,所以你可以在沒有sessionId/eventId的null時候設定sid/ eid(參見***):
addInventory(inventoryAdd: any, pid: string, sid?: string, eid?: any) {
const inventoryCollectionRef = this.afs.collection("/Party-Management/" pid "/Party-Inventory");
const timestamp = { timestamp: firebase.firestore.FieldValue.serverTimestamp() };
const sessionId = sid ? { sessionId: sid} : null; // ***
const eventId = eid ? { eventId: eid } : null; // ***
inventoryCollectionRef.add({ ...inventoryAdd, ...timestamp, ...sessionId, ...eventId });
}
傳播undefined也是一個空操作,就像傳播一個空字串一樣,所以您也可以這樣做(請參閱 參考資料***):
addInventory(inventoryAdd: any, pid: string, sid?: string, eid?: any) {
const inventoryCollectionRef = this.afs.collection("/Party-Management/" pid "/Party-Inventory");
const timestamp = { timestamp: firebase.firestore.FieldValue.serverTimestamp() };
const sessionId = sid && { sessionId: sid}; // ***
const eventId = eid && { eventId: eid }; // ***
inventoryCollectionRef.add({ ...inventoryAdd, ...timestamp, ...sessionId, ...eventId });
}
這是有效的,因為x && y評估x并且 if xis falsy將值作為其結果,否則它會評估y并將其作為結果。因此,如果sid/eid是undefined或"",sessionId/eventId是undefined或""(并且傳播它們不會在物件中放置任何東西);否則,它們就是物件,傳播它們會將它們的屬性添加到物件中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483565.html
上一篇:如何比較我的兩個projectModels物件,一個來自本地值,另一個來自未來?撲
下一篇:我不明白64美元從何而來
