我刚刚开始学习打字稿,并且在将我的Node js服务器代码迁移到打字稿中时,遇到了几个问题(或问题)。
我不知道为什么,但是当我看打字稿教程时,大多数辅导员都使用yarn而不是npm。这是为什么?我刚刚了解到,知道纱线的速度要快一些,并且还有其他一些好处,但是打字稿应用程序与纱线而不是npm配合得很好吗?
在编写打字稿应用程序时,导师会安装带有@ types /前缀的依赖项以及没有前缀的依赖项。我猜带有@types的那个是用typescript编写的相同模块。那为什么要同时安装两者呢?打字稿还不够吗?
因为JavaScript与Typescript兼容,所以只使用non @types模块可以吗?
我使用包裹构建打字稿应用程序。并且在名为engine.io的模块中(可能是因为我将socket.io作为依赖项而安装),发生了构建错误,指出它无法解决依赖项“ uws”。
D:\NodeApps-valC\ToolboxWars - Parcel\node_modules\engine.io\lib\server.js:107:35: Cannot resolve dependency 'uws'
105 | var wsModule;
106 | switch (this.wsEngine) {
> 107 | case 'uws': wsModule = require('uws'); break;
| ^
108 | case 'ws': wsModule = require('ws'); break;
109 | default: throw new Error('unknown wsEngine');
110 | }
仅使用节点index.js运行即可正常运行。可能是因为在执行脚本时,实际上并没有经过需要uws的那一行,而是使用包裹,我认为ts编译器正在尝试找出require()语句所需的每个模块,即使从未执行过该代码。我写这个吗?如果是这样,您会提出什么建议。我只是通过添加uws依赖关系来解决,但这是唯一的方法吗?
任何帮助都会非常感激。
编辑: 关于问题2和问题3,在通读ts文件node_modules / @ types的代码后,我发现它们只是名称空间和类型定义,以使js模块与ts而不是ts版本兼容。
答案 0 :(得分:0)
关于问题2和3,在通读ts文件node_modules / @ types的代码后,我发现它们只是名称空间和类型定义,以使js模块与ts兼容,而不是完全重写的ts版本的模块
问题4与打字稿无关,而是由模块开发人员将存储库更新为空引起的。有相同问题的任何人都可以通过使用模块的旧版本来解决此问题。 https://github.com/socketio/socket.io/issues/3342