我有一些使用更好的sqlite3 3的代码,我正在尝试将它移植到类型记录中。
原始javascript代码的相关部分如下所示:
import Database from "better-sqlite3";
/**
* @param {string} filename
* @return {Database}
*/
function openDb(filename)
{
let db;
db = new Database(/* some arguments */);
// some initialization
return db;
}将代码放入.ts文件并添加类型后,如下所示:
import Database from "better-sqlite3";
function openDb(filename: string) : Database
{
let db : Database;
db = new Database(/* some arguments */);
// some initialization
return db;
}我得到了代码中使用Database符号作为类型的所有位置的错误Database。
如果我使用类型编码3.8的import type,那么错误将被逆转:我可以使用符号作为类型,但不能用作构造函数。
是否有任何方法来导入此符号,以便将其作为构造函数和类型进行类型记录?有什么魔力可以让我用代码来表达自然的思想流吗,“我调用new Something()来构造Something,然后返回said Something",而不是复杂的思想流”我调用new Something()来构造SomethingUnderADifferentName,然后返回said SomethingUnderADifferentName“吗?
发布于 2021-08-16 09:26:55
这应该与esModuleInterop编译器选项结合使用:
// index.ts
import DatabaseConstructor, {Database} from "better-sqlite3";
function openDb(filename: string): Database {
let db: Database = new DatabaseConstructor('/tmp/sqlite.db');
// Some initialization
return db;
}这样处理时不会返回错误:
$ tsc --strict --esModuleInterop index.ts发布于 2021-06-02 12:30:52
试试这个:
import Database, {Database as DbType} from 'better-sqlite3';
function openDb(filename: string) : DbType
{
let db : Database;
db = new Database(/* some arguments */);
// some initialization
return db;
}https://stackoverflow.com/questions/66930477
复制相似问题