如何在ASP.Net MVC中从JavaScript转换到TypeScript?

5

由于明显的原因,我们希望在项目中使用TS而不是JS。

我们遇到的问题是在MVC视图中设置的变量,这些变量由给定视图的模型设置。

例如,tes.cshtml:

@model Testmodel
<script>
  var test = {};
  var test.myProp = @Model.Testproperty;
<script>

现在,在我的test.ts文件中,当我尝试获取test变量时,会出现错误,因为我的TypeScript文件不知道它。

我是否存在架构误解?还是有什么诀窍可以做到这一点?

老实说,我们在RazorViews中设置和/或创建了大约100个变量,很可能有很多来自我们的resx文件的资源变量,我们需要在javascript警报中使用!

2个回答

1
您可以创建定义文件并将所有全局声明放在那里。例如:
declare interface SampleInterface{
    myProp:string;
    myFunc(someParameter:string):void;
}
declare var test:SampleInterface;
declare var someFunc: () => number;

关于编写声明文件的更多信息在此处


你能为一个函数扩展这个例子吗?带有变量似乎运行良好,谢谢 :) - Rene Koch

1
一种方法是将所有变量甚至所有资源变量附加到Window上,然后您可以在TypeScript中创建一个助手,以便您可以解析Window.Variables和Window.ResxVariables以满足您的需求。
服务器端,您需要两个字典Variables和ResxVariables,它们可以是基控制器中的静态变量。
然后您需要两个方法来简化向这些字典添加变量的过程。
Variables.Add("Timezone", "GMT+2");

And

ResxVariables.Add("ExitAlert", "Please stay more");

这两种方法将在您的控制器操作中可访问,并且您还可以添加模型属性。
然后,您需要一个HtmlHelper来帮助您将这些字典呈现为附加到Window的对象。
您还需要支持在呈现新页面或根据需要清除这些字典。
当我使用类似于此的东西时,我们有两个字典GlobalVariables和PageVariables。渲染新页面时未清除全局变量,但已清除PageVariables。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接