假设我有一个需要返回 StringMap<string, boolean>
类型的函数 . 有效的示例返回值为: {"required": true}
.
现在,我've read in a tutorial (it'不重要哪个教程)你可以创建一个返回类型为 { [s: string]: boolean }
的函数,这与上面的StringMap是相同的返回类型 .
我不明白这两种返回类型是怎样的?第二个版本甚至有效吗?
-
我在TypeScript中看到的所有返回类型都只包含过去的类型,即boolean,number,any . 例如
function (): number {}
. 在我们的第二个版本中,我们使用s: string
,这意味着我们给变量一个名称,并指定它的类型,我们怎么突然允许变量名为s
? -
除此之外,我们将此字符串放在数组
[s: string]
中作为第二个版本中的键(因此键现在是一个数组) . StringMap有一个字符串作为键 .
2 回答
语法与您的想法略有不同 . 它是定义字典\ Map 的独特语法 .
{ [s: string]: boolean }
表示:一个映射,它有一个带字符串类型的键,它的值是boolean .s
完全没有意义,可能是你想要的任何东西 .(那么为什么首先给它命名?我的猜测是在映射更复杂的类型时使代码更清晰 . 有时你会想要调用索引
id
,有时address
等等 . )更多信息here,索引类型就是你想要的 .
在线的Typescript手册并不是最友好的文档,但我认为它已经足够好了,我建议每个使用打字稿的人至少都要浏览它 . 特别是因为在2.0中他们添加了一堆疯狂\ awesome类型的功能,如映射类型 .
{ [s: string]: boolean }
类型定义indexable type接口 .您看到的数组就是决定定义接口索引的语法 .
据我所知,密钥的名称被忽略,只有类型才是重要的 .
此代码
{ [s: string]: boolean }
定义了一个可索引的接口,其中索引是字符串,值是布尔值 .我假设
StringMap
的定义如下:如果你问我这是多余的(因为名称说它应该是一个字符串映射,所以键应该是字符串) . 我会将
IStringMap
接口声明为:TypeScript中的接口只定义对象的“形状” . 前三个定义具有相同的形状,因此这是完全有效的: