是否可以在Blazor中将导出的JavaScript模块类作为互操作类导入?

是否可以在Blazor中将导出的JavaScript模块类作为互操作类导入?,javascript,c#,blazor,blazor-server-side,Javascript,C#,Blazor,Blazor Server Side,在最新的Visual Studio 2019中为Blazor服务器端解决方案创建Razor类库时,我看到以下文件: ExampleJsInterop.cs public class ExampleJsInterop : IAsyncDisposable { private readonly Lazy<Task<IJSObjectReference>> moduleTask; public ExampleJsInterop(

在最新的Visual Studio 2019中为Blazor服务器端解决方案创建Razor类库时,我看到以下文件:

ExampleJsInterop.cs

    public class ExampleJsInterop : IAsyncDisposable
    {
        private readonly Lazy<Task<IJSObjectReference>> moduleTask;

        public ExampleJsInterop(IJSRuntime jsRuntime)
        {
            moduleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
               "import", "./_content/MyNamespace/exampleJsInterop.js").AsTask());
        }

        public async ValueTask<string> Prompt(string message)
        {
            var module = await moduleTask.Value;
            return await module.InvokeAsync<string>("showPrompt", message);
        }

        public async ValueTask DisposeAsync()
        {
            if (moduleTask.IsValueCreated)
            {
                var module = await moduleTask.Value;
                await module.DisposeAsync();
            }
        }
    }
这很有趣。然而,我想做的是。在我搜索过的任何链接中,我都没有看到与此相关的任何引用,我找到的最接近的StackOverflow问题是


是否可以在JavaScript/浏览器中导出类,然后通过互操作将它们导入Blazor?如果是这样,如何使用?

我要做的是在wwwroot外部的文件夹中使用一个类似这样的类型脚本类(伪代码),并在类库中将tsconfig设置为编译为wwwroot:

class SizeHelpers {
    public GetBoundingClientRect(element: HTMLElement): DOMRect {
        return element.getBoundingClientRect();
    }
}
然后使用此选项将其导出(在同一文件中):

然后在C#中,我按需在服务中导入此文件:

    var helpersInstance = await helpersModule.InvokeAsync<IJSObjectReference>("getSizeHelpers");
    Helpers = new Helpers(helpersInstance);
var helpersInstance=await helpersModule.InvokeAsync(“getSizeHelpers”);
助手=新的助手(HelperInstance);
然后在C#中,我这样做是为了使用函数:

 public class SizeHelpers
    {
        private readonly IJSObjectReference _instance;

        public SizeHelpers(IJSObjectReference instance)
        {
            _instance = instance;
        }

        public ValueTask<BoundingClientRectangle> GetBoundingClientRect(ElementReference element)
        {
            return _instance.InvokeAsync<BoundingClientRectangle>("GetBoundingClientRect", element);
        }
}
公共类大小帮助
{
私有只读IJSObjectReference_实例;
公共SizeHelpers(IJSObjectReference实例)
{
_实例=实例;
}
公共价值任务GetBoundingClientRect(元素引用元素)
{
返回_instance.InvokeAsync(“GetBoundingClientRect”,元素);
}
}

酷!谢谢@Rogier的回答。您知道如何使用
将类
从JavaScript导出到Blazor中吗?这才是我真正感兴趣的目标。如果不可能,这是一个很好的解决方案,我可以/将使用。不管怎样,我都可以使用它。:)
    var helpersInstance = await helpersModule.InvokeAsync<IJSObjectReference>("getSizeHelpers");
    Helpers = new Helpers(helpersInstance);
 public class SizeHelpers
    {
        private readonly IJSObjectReference _instance;

        public SizeHelpers(IJSObjectReference instance)
        {
            _instance = instance;
        }

        public ValueTask<BoundingClientRectangle> GetBoundingClientRect(ElementReference element)
        {
            return _instance.InvokeAsync<BoundingClientRectangle>("GetBoundingClientRect", element);
        }
}