Maison > Questions et réponses > le corps du texte
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粉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,您可能会收到警告。某种形式的记录
a> est plus utile/plus clair pour vous ?
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 estobject
或undefined
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 |空=空