【问题标题】:What does this line of Typescript mean? [duplicate]这行 Typescript 是什么意思? [复制]
【发布时间】:2016-02-19 12:14:39
【问题描述】:

我正在从头开始学习一些打字稿。这是他们官方网站上的一些代码。我对下面的一行感到困惑。这个声明在这里意味着什么?等号后的 {} 表示返回类型为 void?

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

/////////////////////////////////////// ///////////////////////////////////////////////p>

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

    var lettersRegexp = /^[A-Za-z]+$/;
    var 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
var strings = ['Hello', '98052', '101'];
// Validators to use
var validators: { [s: string]: Validation.StringValidator; } = {};
validators['ZIP code'] = new Validation.ZipCodeValidator();
validators['Letters only'] = new Validation.LettersOnlyValidator();
// Show whether each string passed each validator
strings.forEach(s => {
    for (var name in validators) {
        console.log('"' + s + '" ' + (validators[name].isAcceptable(s) ? ' matches ' : ' does not match ') + name);
    }
});

【问题讨论】:

    标签: javascript typescript frontend


    【解决方案1】:

    这一行...

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

    分解为:

    • var validators - 声明一个变量
    • { [s: string]: Validation.StringValidator; } 这是类型信息。此变量的类型是哈希。这里的部分是{ [type of key]: type of value }。所以,这是Validation.StringValidator 的字符串哈希。
    • = {} 这是变量的初始值:空哈希。

    如果我想将数字散列到字符串中,我会使用

    var myHash: { [key: number]: string } = {};
    

    【讨论】:

    • 谢谢!我理解第一点和第三点。对于第二点,您提到了哈希;我可以说它是在声明一个像字典一样的东西,以字符串为键吗?如果我错了,请纠正我。
    • 是的。它是一个带有字符串键和Validation.StringValidator 类型值的字典。
    • 完美!感谢您的确认!我会给你功劳!!!
    • var myHash: { [key: number]: string } = {};只是一件快速的事情,你认为 [key:number] 这里的括号是必需的吗?是 TS 要求的字面意思吗?
    • @catlovespurple 这是真正的 TypeScript 语法,如果这就是您的要求。这就是您声明字典类型的方式。如果您不想对字典施加类型限制,请不要使用此语法。方括号是语法的一部分,它们不是可选的。
    【解决方案2】:

    我不知道 TypeScript,但我知道 ECMAScript,其中 TypeScript 是一个超集,并且在 ECMAScript 中,花括号表示一个对象字面量,因此,这会将一个空对象分配给变量 validators

    在接下来的两行中,空对象填充了一些键值映射。

    【讨论】:

    • 是的,花括号创建了一个空对象。有机会了解这部分吗? - [s:字符串]:Validation.StringValidator?我觉得它把一个字符串对象作为参数传递给了 StringValidator ctor。
    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2012-10-26
    • 2011-08-23
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多