Angular 5 报错TS2350:仅能以new调用void函数的问题排查
解决TS2350: Only a void function can be called with the 'new' keyword 报错
嘿,这个报错我太熟了!问题根源一眼就能看出来:你不小心用new关键字去调用了一个根本不是构造函数的方法。
具体到你的场景,大概率是写了类似new Date.now()这样的代码——Date.now()是Date对象的静态方法,它的作用就是直接返回当前时间的时间戳(一个数字),完全不需要用new来调用,因为它根本不是用来创建实例的构造函数。TypeScript的类型检查机制会严格拦截这种错误用法,所以就抛出了TS2350。
修复方法分两种情况:
- 如果你的需求就是获取当前时间戳,直接去掉
new就行:// 监听回车键事件获取时间戳 document.addEventListener('keydown', (e) => { if (e.key === 'Enter') { const timestamp = Date.now(); console.log('当前时间戳:', timestamp); } }); - 如果你其实是想创建一个当前时间的Date实例(之后可能还要做其他日期操作),那应该用
new Date(),而不是去碰Date.now():document.addEventListener('keydown', (e) => { if (e.key === 'Enter') { const currentDate = new Date(); const timestamp = currentDate.getTime(); // 同样能拿到时间戳 console.log('当前时间对象:', currentDate); console.log('对应的时间戳:', timestamp); } });
简单总结下:new关键字是用来调用构造函数创建对象实例的,而Date.now()是个直接返回值的静态方法,两者完全不搭,去掉new就搞定啦!
内容的提问来源于stack exchange,提问作者stacka
相关产品推荐
相关产品推荐

