Typescript代码语句中的变量数据类型

时间:2018-07-10 11:58:18

标签: javascript typescript

在打字稿文档中,像定义变量类型一样,例如:-

let var:number

其中var是数字类型,但是在下面提到的代码中:-

namespace Validation {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }

    const lettersRegexp = /^[A-Za-z]+$/;
    const numberRegexp = /^[0-9]+$/;

    export class LettersOnlyValidator implements StringValidator {
        isAcceptable(s: string) {
            return lettersRegexp.test(s);
        }
    }

    export class ZipCodeValidator implements StringValidator {
        isAcceptable(s: string) {
            return s.length === 5 && numberRegexp.test(s);
        }
    }
}

// Some samples to try
let strings = ["Hello", "98052", "101"];

// Validators to use
let validators: { [s: string]: Validation.StringValidator; } = {};
validators["ZIP code"] = new Validation.ZipCodeValidator();
validators["Letters only"] = new Validation.LettersOnlyValidator();

// Show whether each string passed each validator
for (let s of strings) {
    for (let name in validators) {
        console.log(`"${ s }" - ${ validators[name].isAcceptable(s) ? "matches" : "does not match" } ${ name }`);
    }
}

在上面的代码中,语句的含义是什么:-

let validators: { [s: string]: Validation.StringValidator; } = {};

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

这是string index signature。这意味着您可以在此类型的变量上设置任何属性,只要属性名称是字符串(无论如何必须为字符串)并且属性值的类型为Validation.StringValidator

您可以在随后的validators["ZIP code"] = new Validation.ZipCodeValidator();行中看到它-将字符串属性"ZIP code"设置为值ZipCodeValidator,该值必须从StringValidator扩展。

= {}部分首先只是为validator分配了一个空对象。这样做是为了可以在其上设置属性。如果未将其设置为空对象,则在尝试写入validators["ZIP code"]等时会出现错误。

答案 1 :(得分:2)

这是说验证器是一个对象(类型为Object),其键的类型为String,值的类型为StringValidator

所以基本上,它只是设置类型,就像let a: number;所说的a是一个数字,但对象类型更复杂。