如果用戶忽略了類成員屬性的默認值,是否有任何方法?如果省略,可能會讓TypeScript類的可選屬性回到默認值?
我有constains另一個類的可選實例的自定義類:
export class MyClass1 {
constructor() {
this.name = "";
this.classInstance = new MyClass2();
}
name: string; // name of the object
classInstance?: MyClass2;
}
class MyClass2 {
constructor() {
this.name = "MyClass2 initial name";
}
name: string;
}
爲MyClass1的內容來自JSON,所以有時一些成員變量Children子可不確定。在這些情況下,我希望MyClass1構造函數啓動新的MyClass2()爲classInstance成員變量。
我這是怎麼分配創建MyClass1的實例:
let myNewClass: MyClass1 = {
name: "MyClass"
}
因爲Children子被忽略,我認爲它會在構造函數中設置的默認值。然而,這種情況並非如此。我也嘗試從classInstance -variable中刪除可選符號,但這會產生編譯錯誤,因爲此時對象必須與MyClass1的結構相匹配。我想我不設法通過轉換錯誤編譯,但它並沒有解決這個問題(雖然我不知道這是否正確編譯其一):
let myNewClass: MyClass1 = {
name: "MyClass"
} as MyClass1
在兩宗個案中,Children子得到默認值構造函數設置,它出來null/undefined。
對於我來說,如何解決鑄造問題(無論是設置屬性可選還是使用鑄造)並不重要,只要我可以控制默認值即可。
這樣一個完整的答案,謝謝!我只是想問一下這個問題:'const {title =「」,classInstance = new MyClass2} = jsonMyClass1;'這個語法做了什麼?這是否意味着第一個標題和classInstance被分配了值,那麼jsonMyClass1中的字段會覆蓋可用的值?但是,如果創建了一個對象,只需在下一行輸入'this.title = title;',如何訪問這些變量?我對語法有點困惑,我從未見過它。你聲明const變量,這就是我所理解的,但我不明白它是一個對象還是單獨的變量? –
不客氣。這是[解構](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)。它創建'title'和'classInstance'臨時變量,它是爲var提供默認值的最簡潔的方式(如果prop不存在於jsonMyClass1對象或未定義的)。另一種方法是編寫像'this.classInstance = jsonMyClass1.classInstance!== undefined? jsonMyClass1.classInstance:新的Class2'。你可以隨時查看它在http://www.typescriptlang.org/play/上的轉換,這是一個學習TS的好方法。 – estus
謝謝!嗯,我遇到了另一個有關構造函數的問題:如果classInstance是MyClass1會怎麼樣?我該如何確保數據通過嵌套子類的構造函數傳遞? 例如,JSON來通過包含: '{名字:「在主級MyClass1的實例」,Children子是:{title:「MyClass1的實例嵌套」}}' 我怎樣才能確保也MyClass1的嵌套被創建與構造函數?我從json收到整個對象,所以在這種情況下我是否可以控制它的創建方式? –