Javascript 使用typescript在angular 2模板中未强制键入,但在ts代码中强制键入

Javascript 使用typescript在angular 2模板中未强制键入,但在ts代码中强制键入,javascript,angular,typescript,Javascript,Angular,Typescript,我在跟踪 考虑下面的代码片段 HTML <li *ngFor="let hero of heroes" (click)="onSelect(hero.id)"> <span class="badge">{{hero.id}}</span> {{hero.name}} </li> onSelect接受Hero类型,我希望如果没有传入Hero类型,浏览器会抱怨 但是,没有提出任何错误。我甚至可以为这个分配一个数字类型。selectedHero

我在跟踪

考虑下面的代码片段

HTML

<li *ngFor="let hero of heroes" (click)="onSelect(hero.id)">
  <span class="badge">{{hero.id}}</span> {{hero.name}} 
</li>
onSelect接受
Hero
类型,我希望如果没有传入
Hero
类型,浏览器会抱怨

但是,没有提出任何错误。我甚至可以为这个
分配一个数字类型。selectedHero

模板
类型
是否只是不强制执行

有人能解释一下我哪里做错了吗


感谢您,TypeScript只会给您提供编译时错误,它无法控制或验证代码执行过程中发生的情况。

JavaScript中没有类型,这就是浏览器不报告任何错误的原因。TypeScript仅在将代码编译为纯JavaScript之前检查类型。

由于分配在html文件上,您将不会看到任何错误,但如果您在TypeScript(
ts
)文件中执行了此操作,则如下所示:

constructor(){
  this.onSelect(1); //<-- this will give you an error that the method is expecting a Hero type but that you've given a number
}
constructor(){

this.onSelect(1);//您在哪里分配号码?@echonax号码来自
onSelect(hero.id)中的
hero.id
闭包、TypeScript等都是一种没有严格静态类型概念的语言的表面。这是我与几位谷歌工程师讨论过的一个问题;什么更实用并最终产生更稳定的代码:练习以标准形式控制语言,或者尝试添加一个控制外观来处理以一种语言不支持的方式使用该语言,并且在代码运行时最终会被丢弃。我可以展示几种“意外”使用该语言的方法节拍闭包类型注释,这正是让我这么想的原因;这真的是个好主意吗?@Timconolazio如果我们不被允许在较低级别的语言上添加更高级别的概念,我们怎么会得到有用的语言呢?我们不都还在编写汇编吗?较高级别的概念是一回事,但从根本上改变了语言的特点是另一个。虽然编程语言更紧密地结合在一起,但它也有同样的问题,比如说,只通过翻译设备与某人用日语交谈。听者可能理解它,甚至可能做得很好,但语言的特点和微妙之处,正是这些特点和微妙之处使它在语言表达上更具表现力是的,这会让你束手无策。有些东西似乎无法翻译。随着时间的推移,我怀疑随着TS本身成为一种语言,你会看到更多的变化。
constructor(){
  this.onSelect(1); //<-- this will give you an error that the method is expecting a Hero type but that you've given a number
}