Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net .cshtml文件中的TypeScript_.net_Asp.net Mvc_Visual Studio_Razor_Typescript - Fatal编程技术网

.net .cshtml文件中的TypeScript

.net .cshtml文件中的TypeScript,.net,asp.net-mvc,visual-studio,razor,typescript,.net,Asp.net Mvc,Visual Studio,Razor,Typescript,我正在使用ASP.NET-MVC框架启动一个新项目。我想在这个项目中使用TypeScript来代替JavaScript。VisualStudio很容易支持TypeScript,但它似乎与.cshtml razor文件(完全)不兼容。我能够在.ts文件中创建我的类,并在.cshtml文件中调用这些类,问题是当我将参数传递给.cshtml文件中的对象时,TypeSafety被忽略,并且函数运行时就好像从未定义过类型一样 .ts文件 export class SomeClass {

我正在使用ASP.NET-MVC框架启动一个新项目。我想在这个项目中使用TypeScript来代替JavaScript。VisualStudio很容易支持TypeScript,但它似乎与.cshtml razor文件(完全)不兼容。我能够在.ts文件中创建我的类,并在.cshtml文件中调用这些类,问题是当我将参数传递给.cshtml文件中的对象时,TypeSafety被忽略,并且函数运行时就好像从未定义过类型一样

.ts文件

    export class SomeClass {

    name: number;

    constructor(public tName: number) {
        this.name = tName;
    }

    public sayName() {
        alert(this.name);
    }
}
var instance = new SomeClass("Timmy");
instance.sayName();
.cshtml文件

    export class SomeClass {

    name: number;

    constructor(public tName: number) {
        this.name = tName;
    }

    public sayName() {
        alert(this.name);
    }
}
var instance = new SomeClass("Timmy");
instance.sayName();
正如您所看到的,我正在向构造函数传递一个字符串,尽管我清楚地定义了仅接受数字的参数,但是typesafe被忽略,TypeScript/JavaScript的执行就好像没有问题一样


这两种文件类型都是由微软发明的,所以我有点惊讶于它们之间的友好程度。这还不是世界末日,至少我仍然能够使用面向对象编程,我只是好奇是否有其他人经历过这种情况,也许可以给我一个简短的解释

TypeScript transpiler仅检查和传输仅包含以下内容的文件:

  • Javascript
  • 通过TypeScript(静态类型、泛型类等)添加一些语法性糖代码的Javascript
CSHTML文件的创建基本上是为了包含Razor/C#代码,当然还有HTML/JavaScript/CSS

一些开发人员试图将Javascript代码和CSS样式表直接添加到Cshtml文件中,这不是一个好的做法

JavaScript代码和CSS样式应该在自己的文件中。然后在CSHTML中使用
script
(Javascript)或
style
(CSS)标记来引用该文件

不建议将Javascript代码直接放入视图中(CSHTML或仅HTML),因为它违反了以下原则:

将功能(“行为层”)与网页的结构/内容和表示分离(来源Wikipedia

一些ASP.NETMVC开发人员仍然继续将Javascript代码直接放到Razor视图中,因为他们需要将视图模型中的一些数据直接传递给Javascript代码。当Javascript代码已经在视图中时,可以轻松地传递数据,而不会出现任何复杂情况。但我已经说过这不好;-)

这种打破不引人注目的JavaScript原则的事情是可以避免的。所有需要JavaScript代码读取的数据都应该通过在HTML元素中使用数据属性来存储,例如

<span id="mySpan" data-t-name="123456">Hello World</span>
然后,将TypeScript生成的js文件引用到CSHTML中


希望有帮助。

我想tsc会用
.ts
扩展名编译(传输)代码。我错了吗?如果您仍然希望在html文件中使用内联typescript(vue.js提倡类似的做法),请参阅本期github中的讨论,了解选项: