typescript的get和set怎么偷懒

这个应该是目前看下来,最完美的办法。
但是用了这个,我的ide就没有提示功能了,有办法解决吗
我代码这么写的

class DataImp {
    public static a:number = 1;
    public static b:number = 2;
    public static c:number = 3;
}

const Data = new Proxy(DataImp,{
    get(target:any,prop:string)
    {
        return target[prop];  
    },

    set(target:any,prop:string,value:any):boolean
    {
        target[prop] = value;
        return true;
    }
});

export {Data}

可能会麻烦些:
https://github.com/microsoft/TypeScript/issues/20846

装饰器是可以带参的,带参的函数可以怎么灵活处理就不用我说了吧。
另外,如果是装饰器必须写多个的情况,其他做法一样要写多个。

很好,我昨天就为你准备好了回答,如下
如果其他的C复用当前M,但用不到M内定义的装饰器逻辑,怎么确保其他实例不被污染?
以及非MVC下的,在多处(不同时间,不同位置)定义回调,同时可能随时取消回调,怎么用装饰器实现

如果你说的多个是指多个不同装饰器的话,那么请你看完我写的MVVM之后再做回答,你的所有回答都在我的预料之中

没有类型提示加一个不就好了

const a:DataImp = <any>Data;
export default a;

getter setter目的不是为了好看而是为了调试方便吧 :rofl:,图方便的话直接public得了,就是结构一旦复杂起来,调试的时候又有人要鸡飞狗跳

这样操作,只对成员变量有效
对static无效

直接用proxy对static也是有效的

静态成员也可以,用typeof var

class A {
	static a = 0;
}
let a: typeof A;
1赞

综合总结
gameMaster(答案虽迟但到)
muzzik(马赛克)
sin2d
三位的的指导,最后代码写成了这个样子

class DataImp {
    public static a:number = 1;
    public static b:number = 2;
    public static c:number = 3;
}

const dataProxy = new Proxy(DataImp,{
    get(target:any,prop:string)
    {
        return target[prop];  
    },

    set(target:any,prop:string,value:any):boolean
    {
        target[prop] = value;
        return true;
    }
});

const Data: typeof DataImp = dataProxy;
export default Data;

可以统一在一处设置getter和setter
写class的时候,也可以正常操作,不需要做其他额外处理
ide最后编辑的时候也有提示

完结撒花,再次感谢三位,同时也感谢其他热心参与讨论的朋友

按照 muzzik(马赛克) 的方法,比这个链接的方法简单

const Data: typeof DataImp = dataProxy;
export default Data;

1赞

你是不是有什么误解?装饰器不是用来给你设计逻辑的,是简化引用,详情你看下NestJS吧,就是装饰器对express的封装,就不详细讲解了

我都没看懂你在纠结些啥,装饰器就是相当于定义期调一个函数,可以做一些不想写代码的偷懒工作,而因为是定义期,所以还可以注入后续逻辑。这些,跟自己设计的什么MVC也好MVVM也好,完全不冲突,就存粹一个作用,减少写的代码数量而已。

强撑?装饰器是针对代码提前进行处理,自然有适合它的时候,但是现在这种情况明显一个通用的函数接口比装饰器更适合,况且我并没有纠结,只是你对装饰器太过于自信还反驳我说的话,那么我只好用实际情况证明了,如果还觉得现在这种情况装饰器比函数接口合适那么就任由尔去吧,毕竟我就喜欢看不听劝的人在错误的道路上越走越远,我就只能蛤蛤蛤

有没有demo分享一下 有点没看懂

就是最后解决方案的那段代码

这样就可以直接再class里面定义变量,然后通过后面的proxy统一操作getter和setter,不用每个单独写

我觉得你连我说啥都还没看懂

怪不得你的帖子总是跟人杠来杠去,也不是没原因的

装饰器就是个编译期的东西,过了编译阶段就不存在的了,跟接口不接口有什么关系?也不知道反驳是指什么?用装饰器就不能用接口了?
这么说你能懂吗:装饰器不是实现,实现本身可以是任何方式,就比如接口。

可笑,你说的装饰器是用来减少代码量的,并且用你说的一大堆 理论 证明,可我用实际证明了一个函数接口在当前情况下代码量和装饰器差不多,且比装饰器更加灵活,如果还想问什么是灵活请你看看我上面说的话,至于你说的杠,我反倒觉得这不是你先引起的吗?我已经说过几次了装饰器不太灵活,反而你一而再,再而三的反驳,那么还要求我不能用实际证据证明?现在证明了你又能拿出什么来证明你自己的话吗?