typescript的get和set怎么偷懒

这样做可以达到目的,但有问题
所有的数据,都要用这个函数作为出入口,不够直观。
而且手动写key,容易出错

用getter setter就没有这个问题,可以直接用this.xxx来调用,而且写错了还会有ide提示

这个key会有代码提示,在输入时可以像成员变量一样。这个key在输错的时候,会有红线,IDE也会认为是一个error。

当然,实际上,如果编译成了js,自然是可以运行下去,但是ts本身就是在写代码时保证语法正确。

蛤蛤蛤,答案早就在评论里了,他们却不自知

当然,这里如果进一步优化为:

public getData<T extends keyof IData>(key: T): IData[T] {
    return this.data[key];
}

这样返回值的类型也有提示了,IDE会将后续代码推定出接受这个接口的返回值的变量的类型了。

如果要用getter访问器,最好的是keyof + Object.defineProperty,我这里面有示例

1赞

考虑一下装饰器

装饰器只能修改原型或者静态变量的访问器,且局限性比较大,总不可能用一个方法写一个装饰器

装饰器试过
属性装饰器只是在构造的时候执行一次,不能达到目的

不要只想着怎么赋值,为何思路不开阔一点,想一下把改造变量本身 :smiling_imp:

只是单单做这个功能,那很简单,方法也很多
但都没有getter setter看起来炫酷,方便,直观

我也只是想着,ts约等于js,js和lua又很像
突发奇想想看一下能不能实现而已

你确定你理解我意思? :nerd_face:

image

1赞

看看这样是不是想要的效果 :grinning:

你可能是想要个代理?
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

2赞

我已经说了,装饰器局限性大,你喜欢就好

又学到了.

激动了,装饰器就是再次封装让用的时候更方便而已,具体实现也是defineProperty,有增加了任何局限性吗? :face_with_thermometer:

那你重新改个逻辑,是不是又要重写一个装饰器?

我已经说过两次了,你想不到我也不想说了

不一定,反正你正规写MVC该怎么改也一样怎么写,装饰器存粹让代码变少了