J4N*_*J4N 1 typescript angular ngxs
我刚刚设置了一个带有 NGXS 的 Angular 项目。
在我的 AuthState 中,我有以下内容:
@Injectable()
export class AuthState {
@Selector()
static isAuthenticated(state: AuthStateModel) {
return state.currentUser !== null;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
在组件中,我正在执行以下操作:
export class HeaderComponent implements OnInit {
@Select(AuthState.isAuthenticated) isAuthenticated$: Observable<boolean>;
//...
}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个编译错误:
src/app/layout/header/header.component.ts:14:38 - error TS2564: Property 'isAuthenticated$' has no initializer and is not definitely assigned in the constructor.
14 @Select(AuthState.isAuthenticated) isAuthenticated$: Observable<boolean>;
~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
我完全理解为什么在这里,角度无法知道它将被正确初始化。
我搜索了一下,发现很多链接指向禁用属性初始化检查
"strictPropertyInitialization": false
Run Code Online (Sandbox Code Playgroud)
在 tsconfig.json 中
但问题是我喜欢这个检查,我不想禁用它。必须有一种方法可以不为整个应用程序禁用此功能,但仍然使用 NGXS Select,对吗?
如果您确定不想初始化属性,则可以在属性类型之前使用 Typescript 非空断言运算符 (!):
export class HeaderComponent implements OnInit {
@Select(AuthState.isAuthenticated) isAuthenticated$!:Observable<boolean>;
//...
}
Run Code Online (Sandbox Code Playgroud)
它应该消除编译错误。这个操作符就像告诉 TypeScript :我知道这个属性不会是未定义的,请不要对我大喊大叫 :D
它允许您保留装饰器,而不是将初始化移动到构造函数+您可以保留“strictPropertyInitialization”设置。
| 归档时间: |
|
| 查看次数: |
919 次 |
| 最近记录: |