【问题标题】:Angular - error TS2322: Type 'null' is not assignable to type 'string'Angular - 错误 TS2322:类型“null”不可分配给类型“字符串”
【发布时间】:2021-05-31 20:05:57
【问题描述】:

我的身份验证服务中有此代码:

export class AuthenticationService {
  private token!: string;
  constructor(private http: HttpClient , private router: Router) {}
  logout() {
    this.http.get < {
        access_token: string,
        expiresIn: number
      } > (BACKEND_URL + '/logout')
      .subscribe(response => {
        this.token = null;
        this.isAuthenticated = false;
        this.authStatusListener.next(false);
        clearTimeout(this.tokenTimer);
        this.clearAuthData();
        this.router.navigate(['/']);
        console.log(response);
      }, error => {
        console.log(error);
      });
  }

}

我收到了这个错误:

错误 TS2322:类型“null”不可分配给类型“字符串”。

92 this.token = null;

错误在logout()中

我改成:

this.token! = null;

但它仍然没有解决

我该如何解决?

谢谢

【问题讨论】:

    标签: angular


    【解决方案1】:

    我认为这是编译时错误,因为您的声明语法错误。

    改变,

    private token!: string;   // This is not the right syntax to say token will not be type of string
    

    到,

    private token: string;
    

    private token = null
    

    private token = '';
    

    哪个适合你的情况。

    【讨论】:

    • 当我把它改成私有令牌时:字符串;我收到此错误:错误 TS2564:属性“令牌”没有初始化程序,并且未在构造函数中明确分配。 16 私有令牌:字符串;
    【解决方案2】:

    出现此问题是因为您使用了运算符“!”。这意味着您的变量永远不会为空。

    如果你想设置null,你需要做的只是删除变量后面的符号!

    private token: string = null

    您可以在这里阅读更多内容:Documentation

    【讨论】:

    • 当我把它改成私有令牌时:字符串;我收到此错误:错误 TS2564:属性“令牌”没有初始化程序,并且未在构造函数中明确分配。 16 私有令牌:字符串;
    • 现在您可以使用 null 或打开的字符串进行初始化:私有令牌:字符串 = null 或私有令牌:字符串 = ''
    【解决方案3】:

    “!”对于无法保证立即定义值的情况,存在语法。这是一个逃生舱,不应该依赖它,因为它会使你的代码不那么安全。默认值通常是首选。 使用

    private token = '';
    

    而不是

    private token!: string;
    

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 2021-04-15
      • 2021-11-13
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多