我已经连续两年使用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的答案会很好 - 只是不需要)。
我希望这是有道理的。我已经看了一遍,我无法拼凑出一个有效的答案。
更新
我不相信我已经完成了这个"对"方式,但它现在正在工作,所以我想我发布了我已经完成的各种事情(通常按照我认为重要而不包容的顺序,因为我可能已经忘记了一些)。
答案 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是唯一可行的,因为它可以为你创建命名空间的环境模块,但它们不会发生冲突。