2016-03-28 739 views
0

我一直在使用TypeScript两年了。我不是一个专家,但我花了一些时间在生态系统上:使用VS2015和节点工具,使用VSCode,以及使用TSC和类型(也使用VSCode)的命令行。TypeScript导入混淆 - 它不能很难

我一直在努力,正确的方式来获得静态类型和自动完成等在我一直在写代码。

我有一个我维护(EasyNodeQ)的回购,这是我的TypeScript体验的开始,我有种将它带到/// reference和DefinitelyTyped的易于管理的地方。但是,任何时候我试图在另一个项目中使用它,我都会遇到问题。

事情得到了有点更好,当我开始使用类型(而不是自己下载* .d.ts文件),特别是与环境标志。

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

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

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

这有道理吗?

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

最好在VSCode或命令行的方式...

这是ES6和最新版本的打字稿(虽然与ES5问题的解答将是不错 - 只是不要求)。

我希望这是有道理的。我已经看遍了所有,我不能凑齐一个有效的答案。

UPDATE

我不相信我这样做“正确”的方式,但它的工作,所以我现在想我会发布各种事情我已经做了(一般的顺序我认为它们很重要,而且没有包容性,因为我可能已经忘记了一些)。

  • 我没有npm'd的依赖包(easynodeq),并只用在一个的package.json混帐网址 - 所以我创建了一个合适的NPM包,现在从NPM安装该软件包
  • 相反试图使用Bus.ts作为代码和定义,我将Bus.js作为npm的“肉”,并构建了一个Bus.d.ts文件(同样在npm中)使用non-在可能的情况下定义环境定义,以及从DefinitelyTyped下载环境定义(通过git)和其余环境定义的“--ambient”定义(因为我仍然对这种差异感到困惑)。环境定义最终成为多数:node,express,serve-static,express-serve-static-core,mime,amqplib,而不仅仅是蓝鸟和node-uuid,尽管它们大多数都是通过“类型搜索...“ 难道我做错了什么?
  • 修改的package.json也做“分型安装”
  • 清理的git的回购
+0

我没有投票结束,但我不清楚你问的是什么。 [排版可与NPM一起打包](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html)。 – Aaron

+0

我只是抵消了'-1'(基本上只是做了一个'+ 1')。这是一个有效的问题PS:猜测全局的东西(如node.d.ts)的故事仍然与typings相同(用户需要手动安装类型)。 – basarat

+0

@Aaron只是因为TypeScript正在演变,事情正在发生变化,人们正在尝试新事物,而我现在正在做这两件事。这里有文档,但我发现很难采取各种不同的版本和部分,并弄清楚如何做我想做的事情 - 使用TypeScript构建的包作为TypeScript项目的一部分,并享受TypeScript的优点在任一方面工作。 – Michael

回答

1

有几种方法,使这项工作至今。正如您所提到的,使用类型可用于NPM包中未包含的本地定义。对于那些,你可以使用package.json中的typings字段,它可以使用节点模块分辨率。将这些结合在一起时,您可以发布既使用typings.json又使用打包类型的软件包 - 尽管这会强制用户使用类型来安装定义。但是,这些都不适用于“环境”定义,因为它们不能正确命名空间。可能有用: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代替。使用类型只是可能的,因为它可以为你创建名称空间的环境模块,但它们不会发生冲突。

+0

您提供的链接确实有帮助,现在我可以使用它。我不相信我已经做到了“正确”的方式,但我会在一个答案中“记录”(引用,因为我不确定我做了哪些修正) – Michael