nra*_*ako 3 javascript typescript
这里是做题的打字稿getter / setter方法取样:从2015年开始,2018年1月,2018年9月,等等。
也就是说,在 vanilla JS 对象中为 getter/setter 定义 Typescript 类型的推荐方法是什么?也就是说,我想要一个没有class语法的普通旧 javascript 对象,并了解打字的最佳实践。界面是这样的——
interface Store {
activeEvent: Date
}
Run Code Online (Sandbox Code Playgroud)
这个对象的一些限制 -
否new实例化
没有重复 - 这不起作用
const Store: Store = {
activeEvent: new Date(),
get activeEvent() {
return this.activeEvent;
},
}
Run Code Online (Sandbox Code Playgroud)
没有悬垂的下划线。Airbnb 的 eslint 配置对此大喊大叫 -
const Store: Store = {
_activeEvent: {},
get activeEvent() {
return this._activeEvent;
},
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望有默认值(也就是说,如果我放下密钥,错误就会消失,但在第一次访问时activeEvent未定义)。我想我可以初始化并返回 this.activeDate如果它是未定义的,这有效,但get实际上get&set在那种情况下 -
get activeDate() {
if(this.activeDate){ return this.activeDate }
const date = new Date()
this.activeDate = date;
return date;
},
Run Code Online (Sandbox Code Playgroud)
我宁愿不使用 getter 和 setter 生成重复的键,只是为了拥有 getter 和 setter。
有趣的是,getter/setter 具有相同键的事实不会出错,只是当它们匹配私有变量时,这让我觉得我做错了什么。我很欣赏任何见解。
将您的对象创建包装在一个闭包中,并将不属于该接口的一部分的变量保留在对象之外:
function createStore() {
let activeEvent = new Date();
return {
get activeEvent() {
return activeEvent;
},
};
}
Run Code Online (Sandbox Code Playgroud)
这避免了您当前遇到的名称冲突/无限循环问题 - 您返回的对象有一个.activeEventgetter,但支持它的变量位于对象之外,在createStore函数的范围内。
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |