序
1、参考博文===》①严格模式 - 知乎,②ts的tsconfig.son中文说明③TypeScript Number | 菜鸟教程
2、解决(ts报错“this“ 隐式具有类型 “any“,因为它没有类型注释。)
3、解决(函数内this是undefined 的问题)
4、解决(其目标缺少构造签名的 "new" 表达式隐式具有 "any" 类型。)
正文
"this" 隐式具有类型 "any",因为它没有类型注释。
看着是不是很懵逼,明明教程是这么写的,咋就报错了?
不废话,直接说解决方案吧!
然后你先收藏这篇博文===》ts的tsconfig.json中文说明
看到没, 不允许this有隐式的any类型这个给他改成
noImplicitThis:false
然后新问题又出来了!,怎么this是undefined ?
搜过几篇博文,还是没看懂,博主是这么理解的,这里this,一般指向父级的父级,我举个例子,下面代码this指向的是fun的父级obj,
var obj={
a:2,
fun:function(){
console.log(this.a)
}
}
obj.fun()
而我们现在的代码,如下,他指向的是fun的父级
function fun(i:number){
console.log(this);
}
fun(1);
因为我们是vscode调试工具,那我编译成.js之后 浏览器运行一遍给你看,他指向的是window
所以如果想要this是指向本身fun()这个方法,我们得用new这个关键字给他实例化
function fun(i:number){
console.log(this);
}
var a=new fun(1);
结果就报错一个其目标缺少构造签名的 "new" 表达式隐式具有 "any" 类型。
解决办法也很简单
function fun(i:number){
console.log(this);
}
var a=new (fun as any)(1);
这样一来,你this也指向fun了,然后就是运行最终demo
function fun(i:number){
console.log(this)
this.i=i;
}
var a=new (fun as any)(1);
fun.prototype.yy="你好啊";
console.log(a.i)
console.log(a.yy)
然后值得一提的是,你们注意看
这个prototype的方法,指向的是fun的构造函数,对的,就是跟class类的构造函数一样的。你要是明白类的构造函数是啥,这里,你就秒懂了。