Summary of Typescript Small Problems

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 }`);
    }
}

The following sentence is a bit confusing at first glance, what does it mean!

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

Analyze it,

Define an object of validators, the type is a literal object, the key value of the object is a string type [s:string], and the corresponding value is Validation.StringValidator, an interface object under the namespace.

equivalent to

let object name: {[object key and type]: corresponding value} = empty object.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325338308&siteId=291194637