Javascript TypeScript Angular-将字符串添加到数字属性会导致值为零(0)

Javascript TypeScript Angular-将字符串添加到数字属性会导致值为零(0),javascript,angular,typescript,Javascript,Angular,Typescript,我正在使用Angular和Typescript,我想知道如果我在一个只接受数字的字段中添加一个字符串值,比如“hahah”,它绑定到数字类型的属性,它也不会触发或触发任何错误,而该字段的值将为零!我的意思是这对我来说很好,结果是零比结果是一个奇怪的值要好,但我只是好奇这是怎么回事 下面是我的typescript类的外观: export class Article { public id: string; public price: number; public price2: nu

我正在使用Angular和Typescript,我想知道如果我在一个只接受数字的字段中添加一个字符串值,比如“hahah”,它绑定到数字类型的属性,它也不会触发或触发任何错误,而该字段的值将为零!我的意思是这对我来说很好,结果是零比结果是一个奇怪的值要好,但我只是好奇这是怎么回事

下面是我的typescript类的外观:

export class Article {

  public id: string;
  public price: number;
  public price2: number;

 }
这是我的template.html文件:

<div class="form-group">
  <label class="control-label dash-control-label col-sm-3" for="">Price:</label>
  <div class="col-sm-3">
    <input type="text" class="form-control dash-form-control" id="" placeholder="" name="price" [(ngModel)]="article.price">
  </div>

  <label class="control-label dash-control-label col-sm-3" for="">Price 2:</label>
  <div class="col-sm-3">
    <input type="text" class="form-control dash-form-control" id="" placeholder="" name="price2" [(ngModel)]="article.price2">
  </div>
</div>

价格:
价格2:
正如您所看到的,这些输入绑定到
[(ngModel)]=“article.price”
[(ngModel)]=“article.price2”
当应用程序运行时,它们看起来是这样的:

但如果我输入这样的内容,一切都很好:

 export function add(x: number, y: number): number {
  if (typeof x !== 'number' || typeof y !== 'number') {
    throw new TypeError('x and y need to be numbers');
  }
  return x + y;
}

当我发帖时,数据库中存储的值是:零(0)

为什么

为什么没有错误,比如我试图将字符串添加到数字或其他内容?

谢谢

是的

Typescript更改值取决于属性类型,不会引发错误

因此,如果您传递字符串
add(“aa”+“aa”)返回0。因为函数参数(
编号n,编号n2
)是类型。所以它在转换一个数字(如果它不是一个数字,那么它假设为
0


建议: 更好的方法是可以在输入元素中使用
type=“number”
而不是
type=“text”
,以避免在输入框中键入任何字符串值


价格:
价格2:

类型脚本是javascript的超集,它添加了静态类型检查。 因此,您在typescript中编写的所有代码都将在运行时在javascript中传输,而javascript没有类型安全性

Typescript主要在编译时执行在本例中,我们没有关于用户将键入什么的信息,因此在编译时无法检查它

打字脚本传输

如果你有这样的代码

function add(a: number, b: number) {
  return a + b;
}
add('de', 'de');//compile error
typescript可以知道您调用的函数参数不正确,无法编译。 你可以随时玩它

运行时我们将

function add(a, b) {
  return a + b;
}
因此,如果库使用错误的参数调用它,则无法检查它或抛出错误

解决方法

如果Typescript在传输的版本上有如下类型保护,则可以通过Typescript解决此问题:

 export function add(x: number, y: number): number {
  if (typeof x !== 'number' || typeof y !== 'number') {
    throw new TypeError('x and y need to be numbers');
  }
  return x + y;
}
对于可以很简单但对于类更复杂的基元类型

这是一个问题

但他们声称这与设计目标背道而驰

 export function add(x: number, y: number): number {
  if (typeof x !== 'number' || typeof y !== 'number') {
    throw new TypeError('x and y need to be numbers');
  }
  return x + y;
}