TypeScript导入困惑 - 它不会那么难

时间:2016-03-28 04:05:17

标签: node.js typescript

我已经连续两年使用TypeScript了。我无论如何都不是专家,但我在生态系统中花了一些时间:使用VS2015和节点工具,使用VSCode,在命令行使用tsc和typings(也由VSCode使用)。 / p>

我一直在努力寻找在我编写的代码中获得静态输入和自动完成等的正确方法。

我有一个我维护的回购(EasyNodeQ),这是我的TypeScript体验的开始,我把它带到了一个可管理的地方,带有/// reference和DefinitelyTyped。但是每当我试图在另一个项目中使用它时,我就会遇到问题。

当我开始使用typings(而不是自己下载* .d.ts文件),尤其是环境标志时,事情变得更好了

但是我仍然有很多问题试图在其他项目中使用该软件包。根据我采用的方法,我会得到许多重复标识符,或者找不到模块或...

这可以从节点定义到我在两个地方使用的包(如node-uuid)。

我想要理解的是:如何构建EasyNodeQ,以便在我处理它时,我获得了TypeScript的静态打字优势,但也可以将其无缝地包含在其他项目中,获得这些好处?

这有意义吗?

基本用例是:npm安装一个包并获得它的类型,使用我的EasyNodeQ包并得到它的类型,在一个使用EasyNodeQ和其他软件包的新项目中工作,并轻松管理这些类型。

最好采用VSCode或命令行方式......

这是使用ES6和最新版本的TypeScript(虽然适用于ES5的答案会很好 - 只是不需要)。

我希望这是有道理的。我已经看了一遍,我无法拼凑出一个有效的答案。

更新

我不相信我已经完成了这个"对"方式,但它现在正在工作,所以我想我发布了我已经完成的各种事情(通常按照我认为重要而不包容的顺序,因为我可能已经忘记了一些)。

  • 我没有找到依赖包(easynodeq),只是在package.json中使用git url - 所以我创建了一个正确的npm包,现在从npm安装该包
  • 我没有尝试使用Bus.ts作为代码和定义,而是将Bus.js作为" meat" npm,并构建了一个Bus.d.ts文件(也在npm中)
  • 采用包装类型,尽可能使用非环境定义,并从DefinitelyTyped和" - 环境"下载(通过git)混合环境定义。其余的定义(因为我仍然对这种差异感到困惑)。最终的环境定义占大多数:node,express,serve-static,express-serve-static-core,mime,amqplib,当vs vs bluebird和node-uuid时,即使它们中的大多数是由#34找到的;打字搜索......"我做错了吗?
  • 修改了package.json以进行" typings install"
  • 清理git repo

1 个答案:

答案 0 :(得分:1)

今天有几种方法可以使这项工作成功。正如您所提到的,使用Typings适用于NPM包中本身不包含的定义。对于那些,您可以使用typings中的package.json字段,它将与节点模块解析一起使用。将这些组合在一起时,您可以发布同时使用typings.json并依赖打​​包类型的包 - 尽管这会迫使您的消费者使用Typings来安装定义。但是,这些都不适用于“环境”定义,因为它们无法正确命名。

这可能很有用:https://github.com/typings/typings/blob/master/docs/faq.md#should-i-use-the-typings-field-in-packagejson。我使用两种工作流程的例子也很多:https://github.com/blakeembrey/change-case/blob/master/package.json#L6一直使用节点模块解析,https://github.com/blakeembrey/popsicle/blob/master/typings.json使用Typings代替。使用Typings是唯一可行的,因为它可以为你创建命名空间的环境模块,但它们不会发生冲突。