[英]Getter / Setter in Typescript without Class
以下是 Typescript getter/setter 的 SO 問題示例: 從 2015 年開始, 2018 年1 月, 2018 年9 月,等等。
也就是說,在 vanilla JS 對象中為 getter/setter 定義 Typescript 類型的推薦方法是什么? 也就是說,我想要一個沒有class
語法的普通舊 javascript 對象,並了解打字的最佳實踐。 界面是這樣的——
interface Store {
activeEvent: Date
}
這個對象的一些限制 -
沒有new
的實例化
沒有重復 - 這不起作用
const Store: Store = {
activeEvent: new Date(),
get activeEvent() {
return this.activeEvent;
},
}
沒有懸垂的下划線。 Airbnb 的 eslint 配置對此大喊大叫 -
const Store: Store = {
_activeEvent: {},
get activeEvent() {
return this._activeEvent;
},
理想情況下,我希望有默認值(也就是說,如果我放下鍵,錯誤就會消失,但在第一次訪問時, activeEvent
是未定義的)。 我想我可以初始化並返回this.activeDate
如果它是未定義的,這有效,但在那種情況下get
實際上是get
& set
-
get activeDate() {
if(this.activeDate){ return this.activeDate }
const date = new Date()
this.activeDate = date;
return date;
},
我寧願不使用 getter 和 setter 生成重復的鍵,只是為了擁有 getter 和 setter。
有趣的是,getter/setter 具有相同鍵的事實不會出錯,只是當它們匹配 private-ish 變量時,這讓我覺得我做錯了什么。 我很欣賞任何見解。
將您的對象創建包裝在一個閉包中,並將不屬於該接口的一部分的變量保留在對象之外:
function createStore() {
let activeEvent = new Date();
return {
get activeEvent() {
return activeEvent;
},
};
}
這避免了您當前遇到的名稱沖突/無限循環問題 - 您返回的對象具有.activeEvent
getter,但支持它的變量位於對象之外,在createStore
函數的范圍內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.