Angular 11 any/undefined 类型警告
Angular 11 any/undefined types warnings
我将我的应用程序从 Angular v10 升级到 v11,现在我收到了多个错误和警告,因为某些(可能是所有)字段可能一次未定义:
例如:
const savedToken = new Token(JSON.parse(localStorage.getItem(AuthInterceptor.tokenKey)));
必须变成:
const savedToken = new Token(JSON.parse(<string>localStorage.getItem(AuthInterceptor.tokenKey)));
警告:
Argument of type 'string | null' is not assignable to parameter of type 'string'.
Type 'null' is not assignable to type 'string'
// I know the localStorage value can be null in this case.
另一个例子:
public user$: Observable<User>;
// Property 'user$' has no initializer and is not definitely assigned in the constructor.
因为 user$
在 ngOnInit()
中被初始化为 this.user$ = this.store.pipe()...
你是怎么解决的?
即使我从 angular.json
停用 strict
,结果也是一样的:
"@schematics/angular:application": {
"strict": false
}
我真的需要将我所有的应用程序代码逐行更新到 angular 11?谢谢
这是由 TypeScript 的严格 Class 初始化引起的。
解决方案 1
利用 TypeScript 文档指示的 prop!: Type
语法向编译器表明我们知道该 prop 尚未初始化,我们稍后会处理它。
@Component({...})
export class ExampleComponent {
@Input() inputExampleProp!: string; // ! indicates that we know the variable may be undefined
}
备用解决方案
如果您不关心严格的 class 初始化,您可以通过在编译器选项
中添加一个标志来在 tsconfig.json
中完全禁用该功能
{
"compilerOptions": {
"strictPropertyInitialization": false
}
}
注意:您可能需要重新启动 IDE 才能刷新编译器选项。
在 ts.config 文件中,您只需将 strict:"true" 更改为 strict:"false"
“编译器选项”:{
"baseUrl": "./",
"outDir": "./dist/out-tsc",
“forceConsistentCasingInFileNames”:真,
“严格”:假,
如果仍然显示错误,请重新启动 VISUAL STUDIO 代码 IDE!!!
我将我的应用程序从 Angular v10 升级到 v11,现在我收到了多个错误和警告,因为某些(可能是所有)字段可能一次未定义:
例如:
const savedToken = new Token(JSON.parse(localStorage.getItem(AuthInterceptor.tokenKey)));
必须变成:
const savedToken = new Token(JSON.parse(<string>localStorage.getItem(AuthInterceptor.tokenKey)));
警告:
Argument of type 'string | null' is not assignable to parameter of type 'string'.
Type 'null' is not assignable to type 'string'
// I know the localStorage value can be null in this case.
另一个例子:
public user$: Observable<User>;
// Property 'user$' has no initializer and is not definitely assigned in the constructor.
因为 user$
在 ngOnInit()
中被初始化为 this.user$ = this.store.pipe()...
你是怎么解决的?
即使我从 angular.json
停用 strict
,结果也是一样的:
"@schematics/angular:application": {
"strict": false
}
我真的需要将我所有的应用程序代码逐行更新到 angular 11?谢谢
这是由 TypeScript 的严格 Class 初始化引起的。
解决方案 1
利用 TypeScript 文档指示的 prop!: Type
语法向编译器表明我们知道该 prop 尚未初始化,我们稍后会处理它。
@Component({...})
export class ExampleComponent {
@Input() inputExampleProp!: string; // ! indicates that we know the variable may be undefined
}
备用解决方案
如果您不关心严格的 class 初始化,您可以通过在编译器选项
中添加一个标志来在tsconfig.json
中完全禁用该功能
{
"compilerOptions": {
"strictPropertyInitialization": false
}
}
注意:您可能需要重新启动 IDE 才能刷新编译器选项。
在 ts.config 文件中,您只需将 strict:"true" 更改为 strict:"false"
“编译器选项”:{ "baseUrl": "./", "outDir": "./dist/out-tsc", “forceConsistentCasingInFileNames”:真, “严格”:假,
如果仍然显示错误,请重新启动 VISUAL STUDIO 代码 IDE!!!