Nicht zugewiesene Objekte können in Typescript nicht auf Fehler überprüft werden
P粉986860950
P粉986860950 2024-04-01 20:38:54
0
2
570

Ich versuche, die folgenden js in Typoskript zu konvertieren, aber ich habe Probleme beim Überprüfen meines account-Objekts, da es nicht zugewiesen ist, sodass der Code nicht erstellt werden kann:

const accounts = state.msalInstance.getAllAccounts();
let account;

if (accounts.length) {
  account = accounts[0];
} else {
  await state.msalInstance
    .handleRedirectPromise()
    .then(redirectResponse => {
      if (redirectResponse !== null) {
        account = redirectResponse.account;
      } else {
        state.msalInstance.loginRedirect();
      }
    })
    .catch(error) => {
      console.error(`Error during authentication: ${error}`);
    });
}

if (account) {}

Der obige Code hat in js gut funktioniert, also habe ich ihn in den folgenden ts konvertiert, aber jetzt lässt sich das endgültige if nicht kompilieren, weil ich versuche, die Kontovariable zu verwenden, bevor ich etwas zuweise:

const accounts = state.msalInstance.getAllAccounts();
let account: object;

if (accounts.length) {
  account = accounts[0];
} else {
  await state.msalInstance
    .handleRedirectPromise()
    .then((redirectResponse: {
      account: object;
    }) => {
      if (redirectResponse !== null) {
        account = redirectResponse.account;
      } else {
        state.msalInstance.loginRedirect();
      }
    })
    .catch((error: {
      name: string;
    }) => {
      console.error(`Error during authentication: ${error}`);
    });
}

if (account) {
  // this won't compile anymore as account isn't assigned
}

Wie ändere ich ein account Objekt, um zu sehen, ob es leer oder undefiniert ist? Ich habe versucht, es speziell auf null zu setzen, aber es wird angezeigt, dass ich das Objekt nicht auf null setzen kann.

P粉986860950
P粉986860950

Antworte allen(2)
P粉904450959

解决在赋值之前无法使用变量的问题的解决方案非常简单 - 只需为其赋值即可。

您可以明确其值最初是未定义,这就是已声明但未赋值的变量所发生的情况。或者您可以使用更有意的“无值”初始值,例如 null

当然,这会将您的变量类型更改为包含此初始值的联合,但这与您使用它的方式一致,因此我认为这不会成为问题。

顺便说一句,object 并不是一个很好用的类型。如果您有 linting,您可能会收到警告。某种形式的记录 a> 对您来说更有用/更清晰?

P粉752290033

当你这样做时 ->

let account: object;

if (account) { // error here

你告诉 Typescript 该帐户只能是一个对象,但是 Typescript 会让你延迟分配它,但是如果它检测到有可能永远不会将对象分配给帐户,它会给你 -> 变量“account”在分配之前使用。

被视为您在进行真实测试 -> if (account) {

逻辑上您的类型是objectundefined

let account: object | undefined;

if (account) { // No error

在某些情况下,明确未设置的值可能更有意义,因此有些人也喜欢为此使用 null -> let account:object |空=空

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage