Les objets non alloués ne peuvent pas être vérifiés en cas d'erreur dans Typescript
P粉986860950
P粉986860950 2024-04-01 20:38:54
0
2
536

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粉986860950
P粉986860950

répondre à tous(2)
P粉904450959

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,您可能会收到警告。某种形式的记录 a> est plus utile/plus clair pour vous ?

P粉752290033

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal