将TypeScript与内联服务器端“块和ASP.Net一起使用

我希望能够在ASPX(或Razor)页面中使用内联TypeScript,该页面在页面编译时转换为Javascript。

所以:

 ...  

成为…

  ...  

它应该在转换@块的同一点发生。

这应该可以在运行时使用某种页面后处理,但在编译时不会产生exception – 我想在脚本中找到与任何C#代码同时出错的错误。

理想情况下,TypeScript intellisense等应该在内联块中工作,这使我认为这应该是VS2012扩展。

有没有办法做到这一点?

最简洁的答案是不。

您可以编写一个TypeScript文件并粘贴已编译的JavaScript,但这样就可以了。 一个实际问题是,如果编译器将您的TypeScript转换为JavaScript,您将丢失TypeScript代码。 这就是您拥有TypeScript文件和JavaScript文件的原因。

将脚本内联而不是引用外部脚本的令人信服的理由是 – 您的问题可能有另一种解决方案,不需要内联脚本吗?

您可以创建一个服务器控件,在运行时编译代码并缓存它:

 [DefaultProperty("Text")] [ToolboxData("<{0}:TypeScript runat=server>")] public class TypeScript : WebControl { public string Text { get; set; } protected override void RenderContents(HtmlTextWriter output) { output.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript"); if (!string.IsNullOrEmpty(this.ID)) { output.AddAttribute(HtmlTextWriterAttribute.Id, this.ID); } output.RenderBeginTag("script"); output.Write(CompileToJavaScript(Text)); output.RenderEndTag(); } private string CompileToJavaScript(string typeScript) { // TODO: Call tsc with the code, and return the result. } } 

您可以使用JScript.NET编译tsc.js,如果您需要实现IO层,并清除一些JScript.Net(非JavaScript)语法错误。

  • 有一个解决它的方法,我所做的是在脚本标记中声明razor所需的变量

      
  • next声明Typescript文件中的url变量

     //TypescriptFile.ts declare var url: string; alert(url); 
  • 用它

  • 很遗憾看到Visual Studio 2013仍然不提供服务器端支持。

虽然它不是你问题的真正解决方案,但为什么不把你的TypeScript代码留在 typescript 并使用Typescript Compile让它在运行时编译?