我希望能够在ASPX(或Razor)页面中使用内联TypeScript,该页面在页面编译时转换为Javascript。
所以:
<script type="text/typescript" runat="server">
...
</script>
成为...
<script type="text/javascript">
...
</script>
它应该发生在同一点上 @
要么 <% %>
块被转换。
这应该可以在运行时使用某种页面后处理,但在编译时不会产生异常 - 我想在脚本中找到与任何C#代码同时出错的错误。
理想情况下,TypeScript intellisense等应该在内联中工作 <script>
块,这让我觉得这应该是VS2012扩展。
有没有办法做到这一点?
最简洁的答案是不。
您可以编写一个TypeScript文件并粘贴已编译的JavaScript,但这样就可以了。一个实际问题是,如果编译器将您的TypeScript转换为JavaScript,您将丢失TypeScript代码。这就是您拥有TypeScript文件和JavaScript文件的原因。
将脚本内联而不是引用外部脚本的令人信服的理由是 - 您的问题可能有另一种解决方案,不需要内联脚本吗?
您可以创建一个服务器控件,在运行时编译代码并缓存它:
[DefaultProperty("Text")]
[ToolboxData("<{0}:TypeScript runat=server></{0}:TypeScript>")]
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)语法错误。
虽然它不是您问题的真正解决方案,但为什么不将TypeScript代码保留为原样 <script type="text/typescript">
并使用 打字稿编译 让它在运行时编译?