首页 > 解决方案 > 在打字稿模块声明中重新导出符号

问题描述

我有一个我希望为其编写类型声明的私有 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我需要Submodulelib/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. 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 文档的其他地方它说应该在声明文件中避免这些指令。也许我误解了那部分。


推荐阅读