无法在 ngOnit 错误中初始化 class 属性

unable to initialize class property inside ngOnit error

我收到一条错误消息,提示货币化没有初始化程序。我还在 ngOninit 中收到一个错误,说货币化不能分配给类型字符串 |空。

export class MoviesPageComponent implements OnInit {
  movies: MovieResults[] = [];
  monetization: string;
  constructor(private getMovies: GetMoviesService,
              private route: ActivatedRoute) { }
  ngOnInit(): void {
    this.route.paramMap.subscribe((params: ParamMap) => {
      this.monetization = params.get('monetization');
    });

您收到此错误是因为 monetization 未在构造函数中初始化。

您需要做的是将 属性 设为可选。

export class MoviesPageComponent implements OnInit {
  movies: MovieResults[] = [];
  monetization?: string; // <-- add ? here
  constructor(private getMovies: GetMoviesService,
              private route: ActivatedRoute) { }
  ngOnInit(): void {
    this.route.paramMap.subscribe((params: ParamMap) => {
      this.monetization = params.get('monetization');
    });

如果我们看一下ParamMap.get的函数说明...

get(name: string): string | null

return 类型是 string | null,但是 monetization 属性 类型是

monetization: string;

而且我们在做的时候由于类型不一致导致赋值失败

 this.monetization = params.get('monetization'); //<-- Return type is string | null

要解决此问题,

  1. 使 属性 可选,如其他答案中所述。喜欢monetization?: string。在 属性 名称后缀 ? 隐含了类型
  2. 中的 undefined
  3. 或者,提供一个默认值以满足 null-ness 从 ParamMap.get(...) 读取后的值。喜欢this.monetization = params.get('monetization') ?? '';
  4. 如果让 属性 成为可选的感到不舒服,您可以明确提供 string | undefined | null 到 属性 的类型。喜欢 monetization: string | null | undefined.