typescript的get和set怎么偷懒

一个类里面,有大量的变量,要设置get set
总不会只能一个一个写吧

怎么偷懒

补充:
不是快捷生成get set函数,不是代码自动生成,不是自动补全。
不是快捷生成get set函数,不是代码自动生成,不是自动补全
不是快捷生成get set函数,不是代码自动生成,不是自动补全

也不是为了get set而去get set,是有这个需求,需要在变量存取的时候,干一些事情。
比如说,我有很多数据,放在一个map里面,我可以写2个函数

getData(key:string)
{
//do something
return map[key];
}
setData(key:string)
{
//do something
map[key] = xxx;
}

这样做可以达到目的,但是首先要都用这个函数作为出入口,而且手动写key,容易出错
用getter setter就没有这个问题,可以直接用this.xxx来调用,而且写错了还会有ide提示

我记得以前用lua,可以通过改元表,把所有的变量存取,指向一个函数,这样统一就处理了,不用每个变量写重复的内容,要的就是类似这种效果

我只是觉得,应该有这么一种操作,如果实在找不到,我就准备写个工具生成这一部分的代码

3赞

只为偷懒,为什么不用public
public 多香

了解一下vscode里的user snippets

this[’’]这种可以吗

个人不建议用这种get和set的方式进行设置变量,真滴垃圾这种风格的代码

Object.defineProperty

前期先public后边有需要管理get或set的需求在改成get和set就行了变量名不变不会有影响的

不得不说还是java好用,写完变量,代码提示下自动补充get set

vscode有个功能叫代码片段

因为要在getter和setter里面插东西

功能上是可以的,但是语法上不是很方便。
如果这么做,就需要用一个函数来设置统一的出入口,里面的key要手写,容易出错
如果可以用getter setter,就可以用 this.xxx ,写错了还会有提示

我也很讨厌无意义的getter setter
但这里有需求

不是自动补全的问题大哥

可以自定义个代码段吧image image

interface IData {
  keya: string;
  keyb: string;
}

class Test {
  private data: IData = {keya: "value1", keyb: "value2"};
  private doSomething() {}
  public getData(key: keyof IData) {
    doSomething();
    return this.data[key];
  }
}

const test  = Test();
test.getData("aaaa");// 会有错误提示
test.getData("keya");// 正常

这样是否可以满足?

这样做可以达到目的,但有问题
所有的数据,都要用这个函数作为出入口,不够直观。
而且手动写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会将后续代码推定出接受这个接口的返回值的变量的类型了。