如何在Typescript

时间:2018-06-24 12:09:55

标签: typescript ionic-framework

我正在使用Ionic 3开发应用程序,发现无法使用Ionic native SQLite,因为测试时(ionic serve --lab)SQLite在Web浏览器中不可用。

因此,我想使用Ionic Native Mocks SQLite以便可以在Web浏览器中进行测试。模拟插件的说明说,有两种安装模拟插件的方法,即npm或手动添加到项目,因此我选择了第一种方法。

我通过npm安装了离子本机插件和离子本机模拟SQLite,将SQLite添加到app.module.ts,将SQLite注入了我的服务。

import { SQLite } from '@ionic-native/sqlite';
import { SQLiteMock } from '@ionic-native-mocks/sqlite';

...

providers: [
    ...
    { provide: SQLite, useClass: SQLiteMock },
    AppDbProvider
]

然后尝试了ionic serve --lab,但出现错误。

  

错误:未捕获(承诺):TypeError:无法读取未定义的属性“ executeSql”   TypeError:无法读取未定义的属性'executeSql'

当我试图做这样的事情时。

@Injectable()
export class AppDbProvider {
    constructor(private sqlite: SQLite) {
    // create semester table sql
    const createSemester = 'create table if not exists ...';
    this.sqlite.create({
      name: 'data.db',
      location: 'default'
    }).then(db => {
      db.executeSql(createSemester, {});
    });
  }
}

我不知道为什么SQLiteObject未定义,所以我检查了mock plugin source,发现SQLiteObject的定义类似于export declare class SQLiteObject,每个方法都没有实现。 SQLiteMock.create的定义也是如此。

create(config: SQLiteDatabaseConfig): Promise<SQLiteObject> {
    let theResult: SQLiteObject;
    return new Promise((resolve, reject) => {
        resolve(theResult);
    });
};

很明显,为什么SQLiteObject未定义,但我不明白的是,为什么SQLiteObject是使用declare关键字定义的(我会弄清楚是否不是打字稿新手。 )。

我认为我可以使它工作的方法是复制源代码,并通过删除SQLiteObject关键字并实现declare方法来修改executeSql,但是为什么作者如此编写并制作它即使无法使用,也可以在npm上使用?

我认为作者希望客户端代码能够实现模拟,但问题是
如何实施export declare class

0 个答案:

没有答案