Angular で idb を使うときに発生するasyncIterator プロパティが存在しないエラーの対処方法

Angular で IndexedDB を使いたいと思い、npm の idb を使用していますが、そのまま使うと
以下のエラーが発生します。


ERROR in node_modules/idb/build/esm/entry.d.ts(375,13): error TS2339: Property 'asyncIterator' does not exist on type 'SymbolConstructor'.
node_modules/idb/build/esm/entry.d.ts(375,31): error TS2304: Cannot find name 'AsyncIterableIterator'.
node_modules/idb/build/esm/entry.d.ts(382,98): error TS2304: Cannot find name 'AsyncIterableIterator'.
node_modules/idb/build/esm/entry.d.ts(441,13): error TS2339: Property 'asyncIterator' does not exist on type 'SymbolConstructor'.
node_modules/idb/build/esm/entry.d.ts(441,31): error TS2304: Cannot find name 'AsyncIterableIterator'.
node_modules/idb/build/esm/entry.d.ts(450,109): error TS2304: Cannot find name 'AsyncIterableIterator'.
node_modules/idb/build/esm/entry.d.ts(502,13): error TS2339: Property 'asyncIterator' does not exist on type 'SymbolConstructor'.
node_modules/idb/build/esm/entry.d.ts(502,31): error TS2304: Cannot find name 'AsyncIterableIterator'.
node_modules/idb/build/esm/entry.d.ts(534,13): error TS2339: Property 'asyncIterator' does not exist on type 'SymbolConstructor'.
node_modules/idb/build/esm/entry.d.ts(534,31): error TS2304: Cannot find name 'AsyncIterableIterator'.

使用した NPM モジュール

https://www.npmjs.com/package/idb

対処方法

tsconfig.json の lib に esnext.asynciterable を追加します。


{
  ...
  "compilerOptions": {
    ...
    "lib": [
      ...
      "esnext.asynciterable",
      ...
    ]
  }
}

検証したソースコード


import {openDB, DBSchema} from "idb"

  async openIndexedDB(){

    interface TodoDB extends DBSchema {
      "todo-db": {
        key: string,
        value: {
          workName: string,
          planMinutes: number,
          planSeconds: number,
          isDone: boolean,
        }
      }
    }

    const db = await openDB<TodoDB>('todo-db', 1, {
      upgrade(db) {
        db.createObjectStore('todo-db')
      }
    })

  }

参考にしたサイト

https://github.com/apollographql/graphql-subscriptions/issues/83

返信を残す

メールアドレスが公開されることはありません。