TypeScript使用expo-sqlite时Promise类型定义与回调类型报错如何解决?
错误原因
expo-sqlite 对 SQLStatementErrorCallback 类型的定义要求,SQL执行的错误回调必须返回一个布尔值:
- 返回
true:表示你已自行处理该错误,当前事务不会中断,也不会触发事务级别的错误回调 - 返回
false:表示错误未处理,会立即终止当前事务
你原代码中的错误回调(_, err) => reject(err)默认返回void,和要求的boolean类型不匹配,因此触发类型报错。你定义的Promise<void>类型本身没有问题,不需要修改。
解决方案
给错误回调加上明确的布尔返回值即可,示例修改后代码如下:
import * as SQLite from 'expo-sqlite'; const db = SQLite.openDatabase('address.db'); export const init = () => { return new Promise<void>((resolve, reject) => { db.transaction((tx) => { tx.executeSql(`CREATE TABLE IF NOT EXISTS user ( name TEXT NOT NULL, email TEXT NOT NULL, password TEXT NOT NULL )`, [], () => resolve(), (_, err) => { reject(err); // 此处返回true表示已自行处理错误,符合类型要求 return true; }, ) }); }); }
内容的提问来源于stack exchange,提问作者Joaquin Palacios
相关产品推荐
相关产品推荐

