typescript - 在打字稿模块声明中重新导出符号
问题描述
我有一个我希望为其编写类型声明的私有 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
我需要Submodule
从lib/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'
重新导出这样的符号的正确方法是什么?
解决方案
我发现我需要做两件事:
d.ts
添加对文件的内联引用- 使用 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 文档的其他地方它说应该在声明文件中避免这些指令。也许我误解了那部分。
推荐阅读
- javascript - 为什么块级作用域中的函数不能更改形式参数?
- html - 如何将值从 ejs 表单传递给 nodejs
- spring - 如何在春季批处理中使用动态密钥占位符加载值?
- amazon-web-services - Lex 机器人不响应通过 Slack 的 chat.postMessage API 发送的消息
- openlayers - 在地图上绘制 Geomondrian 空间数据
- sql - 根据同一表中另一列中的条件更新列
- node.js - 如何将公共 IP 上的 Angular 应用程序连接到本地服务器上的节点应用程序?
- d3.js - WebGL Canvas 上的交互性 - PIXI + D3
- android - PopupWindow 的 showAtLocation() 中指定的 x/y 偏移量在哪个维度?
- reactjs - 重新匹配 redux 传递的有效负载