例如
image.png
报错:
Property 'name' has no initializer and is not definitely assigned in the constructor.
错误原因:
在Typescript 2.7 release版本出来后,设置了一个新的编译器选项strictPropertyInitialization。
当本选项 strictPropertyInitialization:true 的时候,编译器会确保一个类中所有的属性都已经初始化,如果没有,那么在属性构建的过程中就会抛出错误。
出现问题的原因一般都有两种,
第一种,我们没有明确的设置或者指出本错误所需要的初始化方法或者构造方法。
第二种,我们没有考虑好我们自己变量的类型究竟是否是string。(注意:undefined与string类型不是同一个类型)
为什么要Typescript检查这个东西?
其实报错就是严格的类型检查,错误信息已经很明确地指出,我们应当在构造器或者初始化方法里面赋值。
我们在TypeScript里面声明出来的userName其实是希望它符合一个string类型的,但是如果你没有为当前变量在构造器或者初始化方法中赋予默认值,那么他就有可能变为undefined,而undefined并不符合我们的期望。
如何解决?
1.你可以设置 strictPropertyInitialization:false取消这个限制(不建议)
{
"compilerOptions": {
"strictPropertyInitialization": false
}
}
2.你也可以在构造器里面为变量赋予一个默认值(建议做法)
3.或者如果你确定自己已经有了初始化方法
也许你是通过辅助方法或者依赖注入等动态引入(TypeScript只能处理静态分析)
你可以通过设置最新的修饰符来避免这个错误的抛出
文章参考https://www.jianshu.com/p/7d829bdac875
网友评论