如何为无法访问的远程JS模块编写d.ts文件&如何使用它?

时间:2016-11-17 02:31:40

标签: typescript

我正在使用一些在私有存储库中提供的NPM模块(非类型JS)。我无法获取源代码或修改它(它仅在CI服务器上可用)。但我有很好的API文档。

我相信如果我可以为这些库编写一些d.ts文件会很有帮助,但经过几天的互联网搜索后,我找不到有关如何将d.ts文件放在远离原始JS文件的指南

这可能吗?

例如,我有以下文件:

[1] /proj/node_modules/priv-lib/index.js (READONLY)
[2] /proj/src/my.ts
[3] /proj/src/declarations/priv-lib.d.ts

虽然文件[1]的API如下(在JS使用中):

const privLib = require('priv-lib')

privLib(xxx)  // itself is a function
privLib.anotherFn(yyy)
privLib.someConstant

我想在文件[3]中为文件[1]编写声明,然后在文件[2]中使用它。

更新1

好的,现在我有了一个可能的解决方案:

// [3] /proj/src/declarations/priv-lib.d.ts

declare module 'priv-lib' {
  function privLib(xxx: any): any

  namespace privLib {
    function anotherFn(yyy: any): any

    const someConstant: string
  }

  export = privLib
}

然后

// [2] /proj/src/my.ts

import privLib = require('priv-lib')
privLib(1)
privLib.anotherFn(2)
privLib.someConstant

似乎不需要///<reference />

我不知道这是否是正确的方法(至少没有副作用,也没有弃用)。

1 个答案:

答案 0 :(得分:0)

你所做的是正确的。如果您使用TypeScript&lt; 2.0你需要一个///<reference />

如果您使用的是TypeScript&gt; = 2.0,则在某些情况下您不需要///<reference />

  • @types/priv-lib可用作npm模块
  • priv-lib包括typigns

因为情况并非如此,您需要///<reference />