文章来自公众号:前端学海
TS 项目报错
报错内容
'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.
即将要实例化的函数中没有 construct,并且隐式类型为 any
报错原因
很多基于 ES5 的构造函数的写法在 TS 的检查下不支持,目前还会有很多较老的库没有更新为 TS 项目,并且已经非常稳定没有维护更新的计划。
解决方式
显示的将构造函数的类型定义为 any,兼容 ES5 写法中没有 construct 的问题
const RedisStore = new (Redis as any)({
host: RedisConfig.host,
port: RedisConfig.port
})
建议
后续 TS 是主流方向,如果你有写方法库的打算,或是在项目中使用类的话,最好都是以 ES6 写法为基础,减少可能出现的写法及类型问题
示例放最后
ES5写法
function Component () {
this.count = 1
}
Component.prototype.add = function () {
this.count++
}
// 实例化
const demo = new Component()
console.log(demo.count)
demo.add()
console.log(demo.count)
ES6 写法
class Component {
constructor(){
this.count = 1
}
add () {
this.count++
}
}
// 实例化
const demo = new Component()
console.log(demo.count);
demo.add()
console.log(demo.count);