Angular错误TS2564:属性“users”没有初始化程序,并且在构造函数中没有明确定义。

17

我正在使用Angular来构建这个应用程序,使用的是来自“https://coursetro.com/posts/code/171/Angular-7-Tutorial---Learn-Angular-7-by-Example” 的示例。
这是完全一样的代码,但我仍然收到一个关于"user:Object"的错误。

如何修复此错误?

error TS2564: 属性“users”没有初始化程序,并且在构造函数中未明确赋值。

12 users: Object; ~~~~~

Here is the exact code as per website:
import { Component, OnInit } from '@angular/core';
import { DataService } from '../data.service';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
  //h1Style:boolean = false;

  users: Object;

  constructor(private data: DataService) { }

  ngOnInit(): void {
    this.data.getUsers().subscribe(data => {
        this.users = data
        console.log(this.users);
      }
    );
  }


}

我的Angular基于ng版本:

Angular CLI: 11.1.2

Node: 14.15.4

操作系统: win32 x64

Angular: 11.1.1

...动画,常用模块,编译器,编译器CLI,核心模块,表单

...平台浏览器,平台浏览器动态,路由器

Ivy工作区:是

包 版本


@angular-devkit/architect 0.1101.2

@angular-devkit/build-angular 0.1101.2

@angular-devkit/core 11.1.2

@angular-devkit/schematics 11.1.2

@angular/cli 11.1.2

@schematics/angular 11.1.2

@schematics/update 0.1101.2

rxjs 6.6.3

typescript 4.1.3


尝试使用小写对象... - MikeOne
即使使用小写对象,仍然出现相同的错误。 - user244394
这并不是一个错误,更像是Typescript的警告,提示你没有初始化这个属性,因此在运行时可能会出现未定义的情况。你可以忽略它,因为代码应该能够正常编译。 - alcfeoh
2
这个回答解决了你的问题吗?[Property '...' has no initializer and is not definitely assigned in the constructor] (https://dev59.com/i1UL5IYBdhLWcg3w27Jq) - mbojko
抱歉,根据示例教程仍然出现错误。如果我删除user:Object,它就可以正常运行。 - user244394
2个回答

20

正如评论中的@alcfeoh所指出的,你之所以会遇到这个错误,是因为你在定义一个变量时没有为它声明值。简单来说,如果你不想声明一个值,那么就...直接bang它

users!: Object;

TypeScript抛出此错误的原因是为了防止以下情况发生:

someNumber: number;

如果没有声明,则someNumber的值将为未定义,即使我们已明确未将此类型列为someNumber: number | undefined;。但在许多其他语言中,someNumber将接收默认值,例如0。然而,这并不是Javascript的工作方式。如果在这种情况下执行someNumber + 1,结果将为null


1
或者,您可以使用空对象进行初始化:users: object = {}; - Linda Paiste
如@LindaPaiste所说:我对@Input() someProp: string提出了抱怨,通过添加默认值@Input() someProp: string=""来扩展它,对我来说完全没问题... - Frank N

10

您应该在 tsconfig.json/"compilerOptions" 下面添加以下代码:

"strictPropertyInitialization": false,

2
完成此操作后,您需要重新启动服务器(ng serve)。 - arunkumaraqm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接