Angular @输入未验证数据类型

Angular @输入未验证数据类型,angular,components,Angular,Components,有两个组件app.component和other.component,并通过@Input从app.component传递一个值到other.component,我可以传递一个看似无效的值,但仍然有效 我在基本数据类型和类中尝试过这一点,并且在这两种情况下都同样有效。为了简单起见,我将提供一个基本类型的示例 演示: app.component.ts注释“value”是一个字符串 import { Component } from '@angular/core'; @Component({ s

有两个组件app.component和other.component,并通过@Input从app.component传递一个值到other.component,我可以传递一个看似无效的值,但仍然有效

我在基本数据类型和类中尝试过这一点,并且在这两种情况下都同样有效。为了简单起见,我将提供一个基本类型的示例

演示:

app.component.ts注释“value”是一个字符串

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  value: string = 'this is a String';
}
app.component.html

other.component.html

结果如下:

this is a String <-- this should be a boolean

这是怎么回事?TS类型是否仅在编译时有用,但在运行时被忽略?无论是在编译时还是在运行时,有没有办法强制执行这种类型验证?

在运行时,typescript代码被转换成JavaScript,以便浏览器能够理解,JavaScript不检查数据类型,因此它可以工作。

我认为Angular还不存在。但是,如果在aot中构建,则可以设置

{
    "compilerOptions": { ... },
    "angularCompilerOptions": {
        "fullTemplateTypeCheck": true
        ...
    }
}
它执行一些模板类型检查

ng build --aot
但我想这会减缓你的发展。使用上述设置尝试prod build,可能会出现一些错误?我在某个地方读到,IVYnext版本的angular渲染器有更多的模板检查


但我并没有遇到太多模板中缺少类型检查的问题。我做了很多项目。奇怪的是TS类型。。。在运行时忽略?-它们在运行时不存在,它们在传输到JS时被剥离,因为否则输出将不是有效的JS。我知道,但可能无法将类型信息传输到JS并在运行时进行检查。这不是问题,只是我们发现了一些奇怪的东西。
this is a String <-- this should be a boolean
{
    "compilerOptions": { ... },
    "angularCompilerOptions": {
        "fullTemplateTypeCheck": true
        ...
    }
}
ng build --aot