interface Ical{
cal(num1:number,num2:number):number
}
class Npc1 implements Ical{
cal(num1: number, num2: number): number {
return num1+num2
}
}
class Npc2 implements Ical{
cal(num1: number, num2: number): number {
return num1*num2
}
}
class Car{
delegate:Ical //可以在浏览器的测试中通过
// delegate:Ical=null! //修改为这个可以在node.js中测试通过,所以这个就是非空断言符号 !
getNum(num11:number,num22:number){
let num=this.delegate.cal(num11,num22)
console.log(num);
}
}
let pp=new Car()
pp.delegate=new Npc2()
pp.getNum(5,4)
elegate:Ical=null!
非空断言符——!
最近刚开始写TS,经常遇到的一个问题就是编译器报错不能将类型“null”分配给类型“Prefab”。ts(2322)
不能将类型“undefined”分配给类型“Prefab”。ts(2322)
属性“target”没有初始化表达式,且未在构造函数中明确赋值。ts(2564)
原因就是TS是一种强类型语言,而且默认开启了严格模式 。当Typescript严格模式设置为on时,它将使用strict族下的严格类型规则对项目中的所有文件进行代码验证。规则是:
规则名称 | 解释 |
---|---|
noImplicitAny | 不允许变量或函数参数具有隐式any类型 |
noImplicitThis | 不允许this上下文隐式定义 |
strictNullChecks | 不允许出现null或undefined的可能性 |
strictPropertyInitialization | 验证构造函数内部初始化前后已定义的属性 |
strictBindCallApply | 对bind, call, apply更严格的类型检测 |
strictFunctionTypes | 对函数参数进行严格逆变比较 |