簡體   English   中英

沒有類的 Typescript 中的 Getter/Setter

[英]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 變量時,這讓我覺得我做錯了什么。 我很欣賞任何見解。

getter setter 錯誤

將您的對象創建包裝在一個閉包中,並將不屬於該接口的一部分的變量保留在對象之外:

function createStore() {
  let activeEvent = new Date();
  return {
    get activeEvent() {
      return activeEvent;
    },
  };
}

這避免了您當前遇到的名稱沖突/無限循環問題 - 您返回的對象具有.activeEvent getter,但支持它的變量位於對象之外,在createStore函數的范圍內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM