【问题标题】:Default function export type definition默认函数导出类型定义
【发布时间】:2016-07-24 12:31:57
【问题描述】:

我正在尝试为pouch-redux-middleware 编写一个类型定义,它导出一个函数:

import PouchMiddleware from 'pouch-redux-middleware'

PouchMiddleware({...})

这是我的类型定义:

interface PouchMiddleware {
  (a: any): any;
}

declare var PouchMiddleware: PouchMiddleware;

declare module "pouch-redux-middleware" {
  export = PouchMiddleware;
}

这会导致错误:

模块 '"pouch-redux-middleware"' 没有默认导出。

声明这个的正确方法是什么?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    要转译为 commonjs 模块,您可能只需将定义文件更改为:

    declare function PouchMiddleware(a: any): any;
    
    declare module "pouch-redux-middleware" {
        export = PouchMiddleware;
    }
    

    然后像这样导入它:

    import PouchMiddleware = require("pouch-redux-middleware");
    

    虽然有点糟糕。有人可能会提出更好的答案。


    我相信我之前的回答仅适用于针对 ES6 并将模块设置为“ES2015”:

    您需要使用--allowSyntheticDefaultImports 进行编译才能使其工作,然后将定义文件中的接口更改为函数:

    declare function PouchMiddleware(a: any): any;
    
    declare module "pouch-redux-middleware" {
        export = PouchMiddleware;
    }
    

    react 库也会发生类似的情况。 Read more here...

    【讨论】:

    • 谢谢,尽管当我尝试调用它时,我得到Cannot find name 'PouchMiddleware 的选项。 TypeScript 的错误信息实在是太糟糕了……但我猜定义中有问题。
    • 添加 declare var PouchMiddleware: PouchMiddleware; 使其编译,但在运行时失败:pouch_redux_middleware_1.default is not a function
    • @jgillich 我更新了我的答案。我不确定为什么在将模块类型设置为“commonjs”时会添加.default
    • 不幸的是,这个也给了我pouch_redux_middleware_1.default is not a function
    • @jgillich 好的,我放弃了这个。我相信过去我看到有人建议不要使用 ES6 导入并这样做:import PouchMiddleware = require("pouch-redux-middleware");
    【解决方案2】:

    一般来说,您可以使用以下结构导出和导入类。

    module pouch-redux-middleware {
         export class pouch {
    
         }
    }
    

    要使用导出的类,你需要写:-

    import {pouch} from 'FileName'
    

    问候

    阿杰

    【讨论】:

    • 我无法更改导出的内容。
    • 如果你想制作 pouch-redux-middleware 的 .d.ts 文件,然后参考 angular-material.d.ts 文件获取示例文件。他们的 .d.ts 文件中没有导出的成员。
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2019-11-16
    • 1970-01-01
    • 2019-04-10
    • 2016-06-03
    • 2021-06-17
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多