将字符串传递给类型为布尔值的输入不会产生错误

时间:2016-11-11 20:41:13

标签: angular typescript

所以我有一个将值定义为布尔值的类:

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>

我没有任何错误。它只是设置传递给设置对象的结果字符串。哪个不可能?我在这里缺少什么?

2 个答案:

答案 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文件,不会应用于模板或运行时。

您需要通过检查输入属性的类型来保护输入属性,并且只有在运行时满足您所需的类型时才接受它。