AngularJS中TS定义Users类出现error TS2564: Property ‘id‘ has no initializer and is not definitely assigned

        在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的过程中,多专注于理解其设计目标、理念和原则,这样可以帮助自己更深入理解这项技术的核心。

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 错误:初始化元素不是常量。 这个错误通常出现在C语言,表示在初始化一个全局变量或静态变量时,使用了一个不是常量的表达式。在C语言,全局变量和静态变量必须在编译时就确定其初始值,而不能在运行时再确定。 解决方法是将初始化表达式改为常量表达式,或者将变量定义为局部变量,这样可以在运行时确定其初始值。 ### 回答2: “initializer element is not constant”是一种编译错误,这种错误通常在编译器遇到不能被预先计算的变量时出现,例如定义一个非常量的变量作为数组的初始值或静态存储的初始值。 详细来讲,对于C语言或C++,该错误通常出现在变量初始化的时候,例如: ```c++ int size = 10; int arr1[size]; // 错误:initializer element is not constant const int size2 = 10; int arr2[size2]; // 正确:size2是一个常量,编译器可以预先计算 ``` 在第一个例子,变量`size`是一个非常量,其值只能在运行时确定,而不是编译时确定。因此,编译器无法在编译时预先计算数组的大小,从而导致错误。在第二个例子,变量`size2`是一个常量,因此编译器可以在编译时预先计算数组的大小,因此没有错误。 似地,在定义静态变量时,也会出现该错误。静态变量必须在编译时就具有初始值,例如: ```c++ static int value1 = 10; // 正确 static int value2 = size; // 错误:initializer element is not constant ``` 在第一个例子,静态变量`value1`具有常量初始值,因此编译器可以在编译时计算它的初始值。在第二个例子,变量`size`是一个非常量,编译器无法在编译时确定它的值,因此导致错误。 最后需要注意的是,如果你使用的是C++11或更新的版本,并且编译器支持变长数组,你可以通过`std::vector`或似的容器来避免通过变量初始化静态数组的问题。例如: ```c++ std::vector<int> arr3(size); // C++11支持变长数组 ``` 总之,“initializer element is not constant”常常因为在编译期无法确定变量的值而出现。如果想要避免这种错误,我们应该尽可能地使用常量来初始化变量或者使用C++11支持的变长数组来解决这个问题。 ### 回答3: 在程序代码常会遇到 error: initializer element is not constant 的错误提示。这一提示通常是由于在定义变量时,使用了一个不是常量的表达式作为初始值导致的。 定义变量时,需要指定一个初始值,如果这个初始值不是一个常量,就会出现上述的错误提示。这是因为在变量定义时,编译器需要为变量分配空间,并将初始值存储到该空间内。而由于这个初始值不是常量,因此编译器无法确定它的值是否会改变,也就无法为变量分配确定的空间。 解决这一问题的方法是使用常量作为变量的初始值。常量是指在程序运行期间不会改变的值,例如字面量(如整数、浮点数、字符串等)或者用 const 关键字修饰的变量。这样,在编译时,编译器就能确定变量初始值的值,并为变量分配相应的空间。 需要注意的是,当定义的变量是静态变量或全局变量时,必须使用常量作为初始值,并确保该初始值在编译时已经确定。而对于自动变量和动态分配的内存空间,初始值可以是一个变量,只要该变量的值在程序运行期间不会改变即可。 综上所述,error: initializer element is not constant 错误提示通常是由于使用了非常量作为变量初始值导致的。解决方法是使用常量作为变量初始值,以确保编译器能够为变量分配正确的空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值