使用类型化的声明文件

时间:2018-12-20 18:08:58

标签: typescript

在TypeScript项目(与Babel 7一起编译)中,我有一个用JavaScript编写的供应商目录(扩展名为.js)。

我的常规TypeScript文件(扩展名为.ts)从此JavaScript目录导入类:

import Pool from "mysqljs/lib/Pool";

我的baseUrlsrc,并且由于src/mysqljs/lib/Pool.js是JavaScript文件,因此在执行new Pool(...)时遇到以下错误:

Cannot use 'new' with an expression whose type lacks a call or construct signature.ts(2351)

即使我在allowJs中将true设置为tsconfig.json,也会发生这种情况。看来TypeScript需要我声明mysqljs的类型,这很好。

但是,我不明白如何在应用程序中声明这些子模块的类型。

我尝试创建一个Pool.d.ts作为mysqljs/lib/Pool.js的同级兄弟,

declare module "mysqljs/lib/Pool" {
    import Pool from "mysqljs";

    export default Pool;
}

但这没有用,导入并尝试使用它时出现以下错误:

import Pool from "mysqljs/lib/Pool";

function f(p: Pool) {}
//Cannot use namespace 'Pool' as a type.ts(2709)

const pool = new Pool(...);
// Cannot use 'new' with an expression whose type lacks a call or construct signature.ts(2351)

(请注意,我在index.d.ts中有一个these contents有一个mysqljs/

使用Flow,我的方法是创建一个mysql.js.flow文件,该文件声明mysqljs及其子模块的所有类型。

0 个答案:

没有答案