木灵鱼儿

木灵鱼儿

阅读:2006

最后更新:2022/01/26/ 19:06:06

关于ts 属性“xxx”没有初始化表达式,且未在构造函数中明确赋值的解决方案

ts默认要求class中声明的属性必须初始化,所以,如果存在没有被初始化的属性,就会报这个错误。

如果我们让他或者等于null,那么在调用属性的时候又会提示值可能为null,极度麻烦

class A {
  data: { name: string } | null = null;
}

const a = new A();
console.log(a.data.name);

然后你又不得不搞个非空断言。

console.log((a.data!).name);

每次都这么写非常麻烦。

赋值方案

既然他要赋值那么我们就赋值

class A {
  data: { name: string };

  constructor(data: { name: string }) {
    this.data = data;
  }
}

const a = new A({name:"sss"});
console.log(a.data.name);

通过构造函数赋值也可以避免这个问题,这个可以解决一部分问题,但是不能解决全部。

tsconfig.json 方法

直接关闭ts的检测初始化的配置,打开tsconfig.json;找到strictPropertyInitialization,将其改为false即可,没有就手动加上。

{
  "strictPropertyInitialization": false
}

单次忽略

如果你既不想在构造函数里赋值,也不想改变全局的配置,那么可以使用单次忽略配置

class A {
  // @ts-ignore
  name: string;
}

const a = new A();
console.log(a.name);

三种方案,根据使用情况使用即可

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

关于作者

站点职位 博主
获得点赞 8
文章被阅读 2006

相关文章