admin管理员组

文章数量:1530516

        在Angular中定义Users类时,出现了error TS2564: Property 'id' has no initializer and is not definitely assigned in the constructor.错误,原来是typescript 2.7.2包含了一个严格的类检查,所有属性都应该在构造函数中声明。

        类的声明:

        错误如下图:

        解决此问题有两种方法,一个是在tsconfig.json中配置,一个是属性加感叹号。答案是在Github上TypeScript-Vue-Starter的Issues问题中看到的,地址:error TS2564: Property 'name' has no initializer and is not definitely assigned in the constructor. · Issue #36 · microsoft/TypeScript-Vue-Starter · GitHub

        在翻看TypeScript文档后发现,文档中也注明此问题:TypeScript 有一个配置项strictPropertyInitialization,只要打开,就会检查属性是否设置了初值,如果没有则报错。如果你打开了这个设置,但是某些情况下,不是在声明时赋值或在构造方法里面赋值,为了防止这个设置报错,可以使用非空断言。

        所以除了前面两种方法外,还可以通过正常的在声明中赋值,或者在构造方法中赋值。

一、tsconfig.json

        打开tsconfig.json文件,如果里面有strictPropertyInitialization,将其改为false即可;没有则添加下。代码如下:

{
  "strictPropertyInitialization": false // 值改为false
}

        也有说将strictPropertyInitialization删除也可以,但本人项目中是没有这属性的,还是报这样错误,在添加后赋值为false后,重新服务则正常了。

二、属性加感叹号

        在属性后面添加感叹号,设置非空断言,在编辑器中显示正常,并且波浪线也消失了,代码也能正常运行了。如下图:

三、构造方法赋值

        根据strictPropertyInitialization校验规则,在构造方法中赋值,代码如下图:

       此时,在构造方法中初始化值后,代码则可以正常运行了。

四、声明时赋值

        根据strictPropertyInitialization校验规则,在声明时赋值,代码如下图:

        此时,在声明时初始化值后,代码则可以正常运行了。

        所以编写TS代码时,得多看官方文档,在学习TypeScript的过程中,多专注于理解其设计目标、理念和原则,这样可以帮助自己更深入理解这项技术的核心。

本文标签: 定义UsersErrortsAngularJS