typescript 属性装饰器 同一文件不报错,export就报错,为什么?

发布于 2022-09-11 21:47:59 字数 1410 浏览 24 评论 0

export function logParameter() {
    return function(target: Object, propertyName: string) {

    // property value
    let _val = target[propertyName];
    console.log('_val',_val)
    // property getter method
    const getter = () => {
        console.log(`Get: ${propertyName} => ${_val}`);
        return _val;
    };

    // property setter method
    const setter = newVal => {
        console.log(`Set: ${propertyName} => ${newVal}`);
        _val = newVal;
    };

    // Delete property.
    if (delete this[propertyName]) {

        // Create new property with getter and setter
        Object.defineProperty(target, propertyName, {
            get: getter,
            set: setter,
            enumerable: true,
            configurable: true
        });
    }
}
}
fdescribe('FormulaLoad test', () => {
    it('decorat', () => {
        class Run {
            @logParameter()
            name: string = '12';
        }
        // @FormulaCollect('PLUS', 35)
        // class PLUS {
        //     run(exp: any, idx) {
        //         exp.splice(idx - 1, 2, exp[idx - 1]);
        //         return idx - 2;
        //     }
        // }
        let temp1 = new Run();
        console.log(temp1);
    });
});

报错 TypeError: Cannot convert undefined or null to object, 这句引起的
如果我把export function logParameter的export 删除又可以正常执行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜雨飘雪 2022-09-18 21:47:59

放心吧。绝对不是导出导致的。应该是你的装饰器的错误。
为此。我还特地去试了。。

应该是你某个装饰器里面某个变量的错误。

clipboard.png

葬心 2022-09-18 21:47:59

if (delete this[propertyName]) 应该是 if (delete target[propertyName])

没有 exportthis 是全局对象。

加上 export , typescript 编译的时候自动加了一个 'use strict' ,于是 this 没有了(undefined),于是 this[propertyName] 就报错了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文