user13234926
user13234926

Reputation:

How to fix TypeScript error(ts:2740) like this

Sorry, I need a translator to use English. Please show the code in the answer. Thank you.


// [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)
        }
    }))
})()

Upvotes: 1

Views: 1385

Answers (1)

Lesiak
Lesiak

Reputation: 26016

You are using async functions incorrectly. Your async function returns a Promise<IDBDatabase | null>, so you cannot assign it to IDBDatabase | null

You have 2 options to execute code when the promise resolves

  • await in an async function
  • use then on promise to provide a callback
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;
})

Upvotes: 1

Related Questions