Objek yang tidak diperuntukkan tidak boleh disemak ralat dalam Typescript
P粉986860950
P粉986860950 2024-04-01 20:38:54
0
2
569

Saya cuba menukar js berikut kepada skrip taip tetapi saya menghadapi masalah menyemak objek account saya kerana ia tidak diperuntukkan jadi kod tidak akan dibina:

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

Kod di atas berfungsi dengan baik dalam js jadi saya telah menukarnya kepada ts berikut, tetapi sekarang yang terakhir if tidak akan disusun kerana saya cuba menggunakan pembolehubah akaun sebelum memberikan apa-apa:

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
}

Bagaimana untuk menukar objek account untuk melihat sama ada ia kosong atau tidak jelas? Saya cuba menetapkannya secara khusus kepada null tetapi ia mengatakan saya tidak boleh menetapkan objek kepada null.

P粉986860950
P粉986860950

membalas semua(2)
P粉904450959

Penyelesaian kepada masalah tidak boleh menggunakan pembolehubah sebelum memberikannya adalah sangat mudah - hanya berikan nilai.

Anda boleh menentukan bahawa nilainya pada mulanya adalah 未定义,这就是已声明但未赋值的变量所发生的情况。或者您可以使用更有意的“无值”初始值,例如 null.

Sudah tentu ini akan menukar jenis pembolehubah anda kepada kesatuan yang mengandungi nilai awal ini, tetapi itu konsisten dengan cara anda menggunakannya jadi saya rasa ia tidak akan menjadi isu.

By the way, adakah object 并不是一个很好用的类型。如果您有 linting,您可能会收到警告。某种形式的记录 a> lebih berguna/lebih jelas kepada anda?

P粉752290033

Apabila anda melakukannya ->

let account: object;

if (account) { // error here

Anda memberitahu Typescript bahawa akaun itu hanya boleh menjadi satu 对象,但是 Typescript 会让你延迟分配它,但是如果它检测到有可能永远不会将对象分配给帐户,它会给你 -> 变量“account”在分配之前使用。

Layani seperti anda sedang menjalani ujian sebenar -> if (account) {

Secara logiknya jenis anda adalahobjectundefined

let account: object | undefined;

if (account) { // No error

Dalam sesetengah kes mungkin lebih masuk akal untuk membatalkan tetapan nilai secara eksplisit, jadi sesetengah orang suka menggunakan null -> let account:object |空=空

untuk itu juga
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan