gpt4 book ai didi

javascript - 没有类的 Typescript 中的 Getter/Setter

转载 作者:行者123 更新时间:2023-12-04 01:34:48 24 4
gpt4 key购买 nike

以下是 Typescript getter/setter 的 SO 问题示例:from 2015 , Jan 2018 , Sept 2018 ,等等。

也就是说,在 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;
},

理想情况下,我希望有默认值(也就是说,如果我删除 key ,错误就会消失,但在第一次访问时 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 具有相同 key 的事实并没有出错,只是当它们匹配私有(private)变量时,这让我觉得我做错了什么。我很欣赏任何见解。

Error on getter setter

最佳答案

将您的对象创建包装在一个闭包中,并将不属于接口(interface)一部分的变量保留在对象之外:

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

这避免了您当前遇到的名称冲突/无限循环问题 - 您返回的对象具有 .activeEvent getter,但支持它的变量存在于对象之外,在 createStore 的范围内功能。

关于javascript - 没有类的 Typescript 中的 Getter/Setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59958590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com