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.
解决在赋值之前无法使用变量的问题的解决方案非常简单 - 只需为其赋值即可。
您可以明确其值最初是
未定义
,这就是已声明但未赋值的变量所发生的情况。或者您可以使用更有意的“无值”初始值,例如null
。当然,这会将您的变量类型更改为包含此初始值的联合,但这与您使用它的方式一致,因此我认为这不会成为问题。
顺便说一句,
object
并不是一个很好用的类型。如果您有 linting,您可能会收到警告。某种形式的记录
a> 对您来说更有用/更清晰?当你这样做时 ->
你告诉 Typescript 该帐户只能是一个
对象
,但是 Typescript 会让你延迟分配它,但是如果它检测到有可能永远不会将对象分配给帐户,它会给你 ->变量“account”在分配之前使用。
被视为您在进行真实测试 ->
if (account) {
逻辑上您的类型是
object
或undefined
在某些情况下,明确未设置的值可能更有意义,因此有些人也喜欢为此使用
null
->let account:object |空=空