typescript 属性装饰器 同一文件不报错,export就报错,为什么?
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
放心吧。绝对不是导出导致的。应该是你的装饰器的错误。
为此。我还特地去试了。。
if (delete this[propertyName])
应该是if (delete target[propertyName])
没有
export
,this
是全局对象。加上
export
, typescript 编译的时候自动加了一个'use strict'
,于是this
没有了(undefined),于是this[propertyName]
就报错了。