首页 > 解决方案 > TypeScript + react-native-sqlite-storage => 错误 TS2304:找不到名称“事务”

问题描述

我通过react-native-sqlite-storage使用 SQLite并尝试使用 TypeScript。

但是 TypeScript 找不到某些类型。导致麻烦的代码:

db.transaction((tx: Transaction) => {
  tx.executeSql('SELECT * FROM movies', [], (tx: Transaction, results: ResultSet) => {
    console.log("Query completed");
  });
});

打字稿错误:

$ ./node_modules/.bin/tsc --alwaysStrict --skipLibCheck
App.tsx:18:24 - error TS2304: Cannot find name 'Transaction'.

18    db.transaction((tx: Transaction) => {
                          ~~~~~~~~~~~

App.tsx:19:54 - error TS2304: Cannot find name 'Transaction'.

19       tx.executeSql('SELECT * FROM movies', [], (tx: Transaction, results: ResultSet) => {
                                                        ~~~~~~~~~~~

App.tsx:19:76 - error TS2304: Cannot find name 'ResultSet'.

19       tx.executeSql('SELECT * FROM movies', [], (tx: Transaction, results: ResultSet) => {
                                                                              ~~~~~~~~~

这太疯狂了,因为Transaction接口是在这里定义的,DefiniteTyped,所以应该可以找到。正确找到 react-native-sqlite-storage 提供的其他函数的类型。

发生了什么?怎么可能从同一个类型文件中找到一些类型和另一些类型?

为了重现这个问题,我所有的项目文件都在这里

标签: typescriptreact-native

解决方案


缺少的类型是react-native-sqlite-storage模块的成员,并且您已经在 name 下导入了整个模块SQLite

import SQLite from 'react-native-sqlite-storage'

所以你必须限定这样的类型:

db.transaction((tx: SQLite.Transaction) => {
  tx.executeSql('SELECT * FROM movies', [], (tx: SQLite.Transaction, results: SQLite.ResultSet) => {
    console.log("Query completed");
  });
});

就像你有资格一样SQLite.openDatabase


推荐阅读