Typescript语法结构“[x:string]:T`解释

Typescript语法结构“[x:string]:T`解释,typescript,syntax,Typescript,Syntax,我最近在typescript项目中遇到了以下语法: export interface EntriesToProperties<T> { [entryFileName: string]: T } export interface EntriesProperties { test: testEntryProperties } entryProperties: EntriesToProperties<EntriesProperties>; 导出接口属性{

我最近在typescript项目中遇到了以下语法:

export interface EntriesToProperties<T> {
    [entryFileName: string]: T
}

export interface EntriesProperties {
    test: testEntryProperties
}

entryProperties: EntriesToProperties<EntriesProperties>;
导出接口属性{
[entryFileName:string]:T
}
导出接口属性{
测试:测试属性
}
入口属性:入口属性;
我有点不明白这里发生了什么

最令人困惑的是:

export interface EntriesToProperties<T> {
    [entryFileName: string]: T
}
导出接口属性{
[entryFileName:string]:T
}
我知道
是一种泛型类型,后来被
取代,但它如何应用于
[entryFileName:string]:T
以及
[entryFileName:string]:T
这里到底是什么

这是一种解构语法吗?如果是,为什么有类型注释变量名
entryFileName:string
?如果声明后面没有赋值,以后如何使用它


它是数组文字吗?因此,这将是一个字符串数组,一个
EntriesProperty
元素数组,还是将
替换为
后的
TestEntryProperty
元素数组?如果不是字符串数组-字符串类型注释在其中起什么作用?

多亏了Mike S.lead,我找到了包含更详细答案的文章

此构造
[entryFileName:string]:T
是对象的特殊“索引签名”语法。它用于定义它可以存储的对象类型,因此它意味着

interface EntriesToProperties<T> {
    [entryFileName: string]: T
}
接口属性{
[entryFileName:string]:T
}
是一个对象,它只能存储类型为
的对象,这些对象已编制索引,并且可以通过
entryFileName:string
访问aso。它有效地创建了类型安全的类似映射的对象,与内置的映射和记录相比,该对象具有一些额外的特性

更多信息:


只需将索引键放在对象条目上,其名称可以是任何内容,通常只是
名称
。在TypeScript手册中有关接口的章节中,也请参见。