首页 > 解决方案 > C# 到 Typescript(或 javascript)的互操作性是否可能?

问题描述

我在具有基于角度的前端和 Net Core / webapi 后端的系统上工作。这是一个功能强大的工程应用程序,可以在打字稿代码中进行大量计算和分析,以便为用户提供丰富且信息丰富的体验。此代码包括在客户端执行的统计和计算等内容,并以绘图、图表或警告的形式立即呈现给用户。因此,许多业务逻辑现在以打字稿代码的形式存在。出于用户体验/反应性目的,此代码需要在客户端。

现在,我们正在构建后端任务,例如数据接口甚至用户数据的日常评估,因此服务器“需要”执行此类计算,以便它以自动化/无人值守的方式复制这种用户体验. 例如,从某个远程 Web 服务加载数据并告诉用户前端会实时告诉的类似内容。代码重复不是一种选择,因为这是很多复杂的代码。逻辑必须相同。

我做这个序言是为了说明这不是前端优先与后端优先的问题。因此,我正在寻找一种方法让C# 后端可以使用其中的一些代码。我想象剥离 typescript -say- 静态代码,例如“function PerformComplexCalculation(jsonObjectParam,...,...)”并在 C# 中执行相同或至少同步的该代码副本。

我知道可以与 JS 互操作,但我从未这样做过,所以有几个问题

我可以接受 nodejs 或类似的后端应用程序/服务处理这个的想法,我可以接受必须复制代码库的想法。同步副本与逻辑复制不同我理解“互操作”类应该是无脂肪的(纯和静态函数)

我知道这不是一个简单的问题,也不是一个单一的答案。为了论证,我将尝试添加一些虚拟代码

    export class FringeMethods
    {
        static doWeirdStuff(allInputsNeeded){
               let x = allInputsNeeded.a + allInputsNeeded.b / allInputsNeeded.c;
               if(x > 0) return "boom!";
               else return "bang!";
        }
    }
public void LoadData(){
         foreach(var entity in someData){
            var allInputsNeeded = convertEntityToSomethingInteroperable(entity);
            var evaluation = interop.invoke("FringeMethods.doWeirdStuff", allInputsNeeded );
            if(evaluation == "bang!"){
               SendEmailToSuperman("Entity {entity} goes bang!");
            }
         }
    }

标签: c#typescriptinterop

解决方案


推荐阅读