如何获取 expo-sqlite 的类型?

Posted

技术标签:

【中文标题】如何获取 expo-sqlite 的类型?【英文标题】:How to get types for expo-sqlite? 【发布时间】:2019-11-26 21:35:50 【问题描述】:

在 expo sdk 的第 33 版中,sqlite 被移到了它自己的包 expo-sqlite,现在我无法加载要加载的类型。

而不是

import SQLite from 'expo';

我有

import SQLite from 'expo-sqlite';

但是类型没有被加载。

我收到以下类型错误:

Cannot find namespace 'SQLite'.

【问题讨论】:

【参考方案1】:

如果您的问题是从 SQLResultSetRowList 访问数据,那么 我建议你定义一个像 CustomResultset 这样扩展 SQLResultSetRowList 的接口。

例如:

import * as SQLite from 'expo-sqlite';

interface CustomResultSet extends SQLite.SQLResultSetRowList 
    _array: [],

这可能不是最佳解决方案,但您应该能够通过 _array 属性访问数据,而不会在代码中出现类型错误。

【讨论】:

【参考方案2】:

expo-sqlite 包中缺少类型。我在 Expo 的 GitHub 页面上打开了一个 issue,问题已经解决了。

GitHub 问题:https://github.com/expo/expo/issues/5264

Github 拉取请求:https://github.com/expo/expo/pull/5544

【讨论】:

【参考方案3】:

我遇到了同样的问题并创建了一个类型声明文件,为我解决了这个问题。

https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html

我从这个包https://www.npmjs.com/package/@types/expo复制了声明

这是声明https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/expo/v31/index.d.ts#L2467

我的项目现在在src 文件夹中有一个expo-sqlite.d.ts 文件,看起来像

declare module 'expo-sqlite' 
  export namespace SQLite 
    type Error = any;

    interface Database 
      transaction(
        callback: (transaction: Transaction) => any,
        error?: (error: Error) => any, // TODO def of error
        success?: () => any
      ): void;
    

    interface Transaction 
      executeSql(
        sqlStatement: string,
        arguments?: string[] | number[],
        success?: (transaction: Transaction, resultSet: ResultSet) => any,
        error?: (transaction: Transaction, error: Error) => any
      ): void;
    

    interface ResultSet 
      insertId: number;
      rowAffected: number;
      rows: 
        length: number;
        item: (index: number) => any;
        _array: HashMap[];
      ;
    

    function openDatabase(
      name:
        | string
        | 
            name: string;
            version?: string;
            description?: string;
            size?: number;
            callback?: () => any;
          ,
      version?: string,
      description?: string,
      size?: number,
      callback?: () => any
    ): any;
  

【讨论】:

【参考方案4】:

您似乎没有下载该模块。安装模块并应用它。

npm install expo-sqlite

【讨论】:

我已经安装了模块。代码运行,只是没有正确输入 @Daniel 你可以试试npm install flag hub 显示的方法应该是npm

以上是关于如何获取 expo-sqlite 的类型?的主要内容,如果未能解决你的问题,请参考以下文章

expo-sqlite 返回 undefined 不是 excuteSql 函数中的对象

如何从列表类型中获取模板类型? [复制]

如何获取文件类型 c++

如何获取java泛型的参数类型

如何获取数据库中标的所有字段和数据类型?

如何在运行时获取泛型的类型