Angular 2 - 自定义验证器语法

时间:2016-08-30 13:47:32

标签: validation angular typescript

请有人向我解释以下TypeScript语法:

{[s: string]: boolean}

这是Angular 2中ValidatorFn的返回类型。特别是,数组:[s: string]表示什么?

在编写自己的自定义ValidatorFn函数时,布尔字段的用途是什么?以下似乎没有区别:

startsWithZero(control: FormControl): {[s: string]: boolean} {
    if (control.value.indexOf('0') !== 0) {
        return {'does not start with zero': true};
    }

    return null;
}

VS

startsWithZero(control: FormControl): {[s: string]: boolean} {
    if (control.value.indexOf('0') !== 0) {
        return {'does not start with zero': false};
    }

    return null;
}

Angular文档在这方面有点抽象,在Google上找不到多少。谢谢!

2 个答案:

答案 0 :(得分:2)

在此示例中,类型注释{[s: string]: boolean}表示字键,其中键为string,值为boolean

此类型称为Indexable Types。这是描述字典的典型方式(a.k.a。哈希映射)。

在Angular 2中,ValidatorFn的输入为:

export interface ValidatorFn {
    (c: AbstractControl): {
        [key: string]: any;
    };
}

...一个采用AbstractControl并返回字典的函数 - 该键标识验证规则,例如maxLength,值可以是解释规则失败原因的任何内容,例如{'requiredLength': maxLength, 'actualLength': v.length}。它不必是boolean

Angular 2来源的示例是here

答案 1 :(得分:1)

我认为它评估一个字符串变量并将该变量赋值为布尔类型;比如[s:string] =" myVar"。然后它实际上说" myVar:Boolean"