这样做可以达到目的,但有问题
所有的数据,都要用这个函数作为出入口,不够直观。
而且手动写key,容易出错
用getter setter就没有这个问题,可以直接用this.xxx来调用,而且写错了还会有ide提示
这样做可以达到目的,但有问题
所有的数据,都要用这个函数作为出入口,不够直观。
而且手动写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,我这里面有示例
考虑一下装饰器
装饰器只能修改原型或者静态变量的访问器,且局限性比较大,总不可能用一个方法写一个装饰器
装饰器试过
属性装饰器只是在构造的时候执行一次,不能达到目的
不要只想着怎么赋值,为何思路不开阔一点,想一下把改造变量本身
只是单单做这个功能,那很简单,方法也很多
但都没有getter setter看起来炫酷,方便,直观
我也只是想着,ts约等于js,js和lua又很像
突发奇想想看一下能不能实现而已
看看这样是不是想要的效果
我已经说了,装饰器局限性大,你喜欢就好
又学到了.
激动了,装饰器就是再次封装让用的时候更方便而已,具体实现也是defineProperty,有增加了任何局限性吗?
那你重新改个逻辑,是不是又要重写一个装饰器?
我已经说过两次了,你想不到我也不想说了
不一定,反正你正规写MVC该怎么改也一样怎么写,装饰器存粹让代码变少了