所以我有一个将值定义为布尔值的类:
export class MySettings {
myProperty: boolean;
}
然后在我的组件中:
import { MySettings } from "./settings";
@Component(){
selector: "my-thing",
template: require("./my-thing.html")
}
export class MyThing {
settings: MySettings = new MySettings;
@Input()
set myProperty ( setting: boolean ){
this.settings.myProperty = setting;
}
}
如果我传递的内容不是像这样的布尔值:
<my-thing myProperty="banana"></my-thing>
我没有任何错误。它只是设置传递给设置对象的结果字符串。哪个不可能?我在这里缺少什么?
答案 0 :(得分:2)
TypeScript转换为JavaScript,当你在TypeScript中有类型时,它只会在编译时给你一个错误。而且由于它无法读取您从HTML设置的对象的属性,因此您不会收到任何错误。由于转换后的JavaScript不是特定于类型的,因此您也没有错误。如果您只想强制执行有效值,请在您的setter中执行:
set myProperty ( setting: boolean ){
if (settings.toString().toLower().include('true,false') {
this.settings.myProperty = setting;
}
}
答案 1 :(得分:1)
这是预期的行为,TypeScript
给表带来的Type断言只是编译时间,仅限于.TS文件,不会应用于模板或运行时。
您需要通过检查输入属性的类型来保护输入属性,并且只有在运行时满足您所需的类型时才接受它。