我正在开发一个使用mssql
npm 包的 Deno 项目。我可以像 npm 包一样导入它import sql from 'npm:mssql';
,它就可以正常工作。问题是我在 VS Code 上没有得到任何类型。当我输入“sql.”时,我没有得到任何建议,并且我之后输入的所有内容都有类型any
。
如果我删除该导入并改用,import sql from 'npm:@types/mssql';
那么当我输入“sql.”时我可以看到建议,但是当我运行它时它会崩溃,因为没有实际值(我收到“找不到模块......”错误)。
如果我同时导入
import sql from 'npm:mssql';
import sql from 'npm:@types/mssql';
然后我收到重复标识符错误。有没有办法同时获取类型和值?
在经典的基于 TSC 的项目中,您可以拥有单独的类型解析根和源解析根,因此您可以拥有如下代码:
node_modules
并且这将从和解析node_modules/@types
(假设@types
设置为类型解析根)。然而根据文档, Deno 采用了无非标准模块解析的设计原则,这(我认为)意味着你不能有不同的解析根。
这确实会导致 TypeScript 出现问题,但 Deno 在您的代码中提供了一种解决方案,允许您使用 @ts-types 文档声明。在这种情况下,您可以这样做:
这将指示 Deno 包含来自 @types/mssql 的类型定义
注意:我认为 IDE 最终可能会隐式地执行此操作,但据我所知,这似乎是目前的官方做法。
问题在于 VSCode 尝试运行
tsserver
与 TS 相关的功能,但它与 Deno 并不完全兼容。对于 VSCode 来说,最简单的解决方案就是添加 Deno 官方扩展。然后打开 VS Code 命令面板(通常是 Ctrl+Shift+P),并运行
Deno: Enable
命令。它将运行 Deno 语言服务器,它完全兼容,而且比tsserver