Как исправить ошибку TypeScript (TS: 2740), как это - PullRequest
0 голосов
/ 06 апреля 2020

Извините, мне нужен переводчик для использования Engli sh. Пожалуйста, покажите код в ответе. Спасибо.


// [message]: Type 'Promise<unknown>' is missing the following properties from type 'IDBDatabase': name, objectStoreNames, onabort, onclose, and 10 more.ts(2740)

const /*[message] here("IDB") -->*/ IDB: IDBDatabase | null = (async () => {
    return (await new Promise((resolve, reject) => {
        const request = indexedDB.open("idb")
        request.onerror = (event) => {
            resolve(null)
        }
        request.onupgradeneeded = (event) => {
            resolve(null)
        }
        request.onsuccess = (event) => {
            resolve(request.result as IDBDatabase)
        }
        request.onblocked = () => {
            resolve(null)
        }
    }))
})()

1 Ответ

0 голосов
/ 06 апреля 2020

Вы используете асин c функции неправильно. Ваша функция asyn c возвращает Promise<IDBDatabase | null>, поэтому вы не можете присвоить ее IDBDatabase | null

У вас есть 2 варианта выполнения кода, когда обещание разрешается

  • , ожидая в asyn c функция
  • использование then при обещании предоставить обратный вызов
function getDBPromise(): Promise<IDBDatabase|null> {
  return new Promise((resolve, reject) => {
        const request = indexedDB.open("idb")
        request.onerror = (event) => {
            resolve(null)
        }
        request.onupgradeneeded = (event) => {
            resolve(null)
        }
        request.onsuccess = (event) => {
            resolve(request.result as IDBDatabase)
        }
        request.onblocked = () => {
            resolve(null)
        }
    })
}

async function awaitInAsyncFunction() {
    const IDB: IDBDatabase | null = await getDBPromise();
}


getDBPromise().then((db) => {
    const IDB: IDBDatabase | null = db;
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...