Maison  >  Questions et réponses  >  le corps du texte

Les objets non alloués ne peuvent pas être vérifiés en cas d'erreur dans Typescript

J'essaie de convertir le js suivant en dactylographié mais j'ai du mal à vérifier mon account objet car il n'est pas alloué, donc le code ne sera pas construit :

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) {}

Le code ci-dessus fonctionnait bien en js, je l'ai donc converti dans le ts suivant, mais maintenant le final if ne sera pas compilé car j'essaie d'utiliser la variable de compte avant d'attribuer quoi que ce soit :

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
}

Comment modifier un account objet pour voir s'il est vide ou indéfini ? J'ai essayé de le définir spécifiquement sur null, mais il est indiqué que je ne peux pas définir l'objet sur null.

P粉986860950P粉986860950185 Il y a quelques jours408

répondre à tous(2)je répondrai

  • P粉904450959

    P粉9044509592024-04-02 09:49:17

    La solution au problème de ne pas pouvoir utiliser une variable avant de lui attribuer une valeur est très simple : il suffit de lui attribuer une valeur.

    Vous pouvez préciser que sa valeur est initialement 未定义,这就是已声明但未赋值的变量所发生的情况。或者您可以使用更有意的“无值”初始值,例如 null.

    Bien sûr, cela changera votre type de variable en une union contenant cette valeur initiale, mais cela correspond à la façon dont vous l'utilisez, donc je ne pense pas que ce sera un problème.

    Au fait, est-ce que object 并不是一个很好用的类型。如果您有 linting,您可能会收到警告。某种形式的记录 est plus utile/plus clair pour vous ?

    répondre
    0
  • P粉752290033

    P粉7522900332024-04-02 09:29:28

    Quand tu fais ->

    let account: object;
    
    if (account) { // error here

    Vous dites à Typescript que le compte ne peut être qu'un seul 对象,但是 Typescript 会让你延迟分配它,但是如果它检测到有可能永远不会将对象分配给帐户,它会给你 -> 变量“account”在分配之前使用。

    Soyez traité comme si vous passiez un vrai test -> if (account) {

    Logiquement, votre type estobjectundefined

    let account: object | undefined;
    
    if (account) { // No error

    Dans certains cas, il peut être plus logique de supprimer explicitement la valeur, donc certaines personnes aiment également utiliser null -> let account:object |空=空

    pour cela

    répondre
    0
  • Annulerrépondre