无法在 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
要解决此问题,
- 使 属性 可选,如其他答案中所述。喜欢
monetization?: string
。在 属性 名称后缀 ?
隐含了类型 中的 undefined
- 或者,提供一个默认值以满足 null-ness 从
ParamMap.get(...)
读取后的值。喜欢this.monetization = params.get('monetization') ?? '';
- 如果让 属性 成为可选的感到不舒服,您可以明确提供
string | undefined | null
到 属性 的类型。喜欢 monetization: string | null | undefined
.
我收到一条错误消息,提示货币化没有初始化程序。我还在 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
要解决此问题,
- 使 属性 可选,如其他答案中所述。喜欢
monetization?: string
。在 属性 名称后缀?
隐含了类型 中的 - 或者,提供一个默认值以满足 null-ness 从
ParamMap.get(...)
读取后的值。喜欢this.monetization = params.get('monetization') ?? '';
- 如果让 属性 成为可选的感到不舒服,您可以明确提供
string | undefined | null
到 属性 的类型。喜欢monetization: string | null | undefined
.
undefined