你能解释一下这个Typescript片段吗?

时间:2016-03-15 21:34:57

标签: typescript

你能解释一下这个Typescript片段吗?

interface Validator<T extends Control> {
    (c:T): {[error: string]:any};
 }

所以它是一个扩展Control的接口,它有一个函数(方法)接受与传递给Validator(T)相同类型的类(泛型),并且该方法返回一个对象的类型......? ?现在那部分我很困惑:

 {[error: string]:any};

这是一种对象?任何?不确定?!

TX

肖恩

2 个答案:

答案 0 :(得分:2)

{
  [error: string]:any;
}

这称为索引签名。它表示当对象被字符串索引时,例如foo["something"],结果类型为any,并且该类型的所有声明的属性可分配给any(尽管这并不意味着任何特定的内容)因为所有内容都可以分配给any)。

答案 1 :(得分:2)

<div class="canvas-wrapper"> <canvas id="canvas"></canvas> </div>是一个带有一个类型参数Validator的接口。 T扩展T,因此Control提供的内容必须延伸T。 (见the language spec for more on this。)

实现Control接口的对象是可调用的(它们是一个函数)。调用时,Validator对象需要一个Validator类型的参数并返回一个对象。可以使用可以映射到任何类型的值的字符串将此对象编入索引。 T表示法称为an index signature,为explained in prose here。它本质上只是意味着您可以使用括号而不是点符号来访问对象。

因此,示例用法可能类似于:

[error: string]:any