我正在编写一个 Razor 类库,其中包含从 TypeScript 转译的 JavaScript 互操作。 TypeScript 中的某些代码将引用全局可用变量 DotNet
当 Blazor 库初始化时会包含它。我找到了DotNet
@microsoft/dotnet-js-interop
中的模块声明Node 包(作为 devDependency 添加)和 TypeScript 能够在 "moduleResolution": "node"
时找到导出。设置在我的 tsconfig.json
。但是,如果我这样做import { DotNet } from "@microsoft/dotnet-js-interop"
,那么此导入将保留在转译的 JavaScript 代码中。我尝试了一些解决方法,但没有成功:
- 使用
import type { DotNet } from "@microsoft/dotnet-js-interop"
结果(TS) 'DotNet' cannot be used as a value because it was imported using 'import type'.
无论在哪里DotNet
正在被引用; - 在尝试像
///<reference types/path="@microsoft/dotnet-js-interop or node_modules/@microsoft/dotnet-js-interop/dist/Microsoft.JSInterpop.d.ts">
这样的事情时,我一生都无法得到任何结果。或修改tsconfig.json
值如paths
(与"baseUrl"="."
)或typeRoots
。所有这些都会导致错误(TS) Cannot find name 'DotNet'
.
有什么办法可以正确导入DotNet
模块声明不会因不必要的导入而污染转译的 JavaScript 代码?
最佳答案
这很棘手(缺乏有凝聚力的文档并没有帮助),但我自己能够弄清楚。
诀窍是声明一个变量并使用 typeof import
定义其类型,如下所示:
declare const DotNet: typeof import("@microsoft/dotnet-js-interop").DotNet;
将其放在文件的顶部,就可以开始了。
关于typescript - Blazor JS 与 Typescript 互操作 - 正确的 DotNet 声明导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75493058/