繁体   English   中英

TypeScript导入混乱-很难做到

[英]TypeScript Import Confusion - It Can't Be This Hard

我已经开始使用TypeScript了两年了。 我无论如何都不是专家,但是我花了一些时间在生态系统中:使用VS2015和节点工具,使用VSCode,以及在命令行使用tsc和键入(也被VSCode使用)。

我一直在努力尝试用正确的方法在我编写的代码中获得静态类型和自动完成等功能。

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

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

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

范围从Node定义到我在两个地方都使用的包(例如node-uuid)。

我要了解的是:我如何构造EasyNodeQ,以便在我进行工作时,既可以得到TypeScript的静态类型输入好处,又可以将其无缝地包含在其他项目中,然后还可以得到这些好处?

那有意义吗?

基本用例是:npm安装软件包并获取其类型,使用my EasyNodeQ软件包并获取其类型,在使用EasyNodeQ和其他软件包的新项目中进行工作,并轻松管理这些类型。

最好以VSCode或命令行方式...

这是与ES6和最新版本的TypeScript一起使用的(尽管与ES5配合使用的答案会很好-只是不需要)。

我希望这是有道理的。 我四处张望,无法拼凑出有效的答案。

更新

我不敢相信我已经按照“正确”的方式进行了操作,但是它现在可以正常工作了,所以我认为我会发布我所做的各种事情(通常按照我认为它们很重要但不具有包容性的顺序,因为我可能忘了一些)。

  • 我没有npm'd依赖包(easynodeq),只是在package.json中使用了git url-所以我创建了一个正确的npm包,现在从npm安装该包
  • 我没有尝试将Bus.ts用作代码和定义,而是将Bus.js用作npm的“肉”,并构建了Bus.d.ts文件(也在npm中)
  • 拥抱类型,尽可能使用非环境定义,并从DefinitelyTyped下载环境定义(通过git)和其余的“-环境”定义混合使用(因为我仍然对区别感到困惑)。 最终,环境定义占大多数:node,express,serve-static,express-serve-static-core,mime,amqplib,而与bluebird和node-uuid相比,即使其中大多数是通过“类型搜索”找到的...“ 难道我做错了什么?
  • 修改后的package.json也可以进行“类型安装”
  • 清理git仓库

今天有几种方法可以使这项工作。 如您所述,使用Typings可以处理其NPM软件包中未包含的定义。 对于这种情况,您可以使用package.jsontypings字段,它将与节点模块解析一起使用。 将它们组合在一起时,您可以发布同时使用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,因为它可以为您创建命名空间的环境模块,但它们不会冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM