【问题标题】:Re-exporting symbols in a typescript module declaration在打字稿模块声明中重新导出符号
【发布时间】:2020-06-29 23:17:50
【问题描述】:

我有一个私有的 JavaScript 模块,我希望为其编写类型声明。结构如下:

.
├── index.d.ts
├── index.js
├── lib
│   ├── submodule.d.ts
│   └── submodule.js
└── package.json

lib/submodule.d.ts:

declare module 'mymodule/lib/submodule' {

    class Submodule {
        // details omitted
    }

    export = Submodule;
}

index.d.ts 中,我需要从lib/submodule 重新导出Submodule 类。此外,我需要记录在顶层声明的快捷方式构造函数。这是我的尝试:

declare module 'mylib' {

    // export a `createSubmodule` function that is just a shortcut for new Submodule()
    import * as Submodule from 'mymodule/lib/submodule';
    function createSubmodule(): Submodule;

    // Also re-export Submodule
    export * as Submodule from 'mymodule/lib/submodule';
}

似乎在index.d.ts 中找不到submodule.d.ts 的声明。导入和导出收到的消息是:Could not find a declaration file for module 'mymodule/lib/submodule'

重新导出此类符号的正确方法是什么?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    我发现我需要做两件事:

    1. 添加对d.ts 文件的内联引用
    2. 使用 commonjs 样式导入

    代码变成:

    /// <reference path="./lib/submodule.d.ts" /> // <= reference the path to the dependency
    
    declare module 'mylib' {
        import Submodule = require('mymodule/lib/submodule'); // <= import = require()
        function createSubmodule(): Submodule;
        export * as Submodule from 'mymodule/lib/submodule';
    }
    

    虽然这可行,但我对 /// 指令有点不舒服,因为在 TypeScript 文档的其他地方,它说在声明文件中应该避免这些。也许我误解了那部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多