这是一个索引签名。来自打字稿文档 https://www.typescriptlang.org/docs/handbook/2/objects.html#index-signatures:
可索引类型有一个索引签名,它描述了我们可以用来索引对象的类型,以及索引时相应的返回类型。
因此,例如,您可以为可索引对象定义一个接口,例如:
interface IArrayOfStrings {
[index: number]: string;
}
这告诉编译器,对于任何类型的对象IArrayOfStrings
,通过数字索引访问的任何成员都将是类型string
.
所以,这将编译没有错误:
interface IArrayOfStrings {
[index: number]: string;
}
let words: IArrayOfStrings = ["foo","bar"];
let word: string = words[0];
但这不会:
interface IArrayOfStrings {
[index: number]: string;
}
let words: IArrayOfStrings = ["foo","bar"];
let myNumber: number = words[0];
在您的示例中,这一行:
dispatchEvent(event: { type: string; [attachment: string]: any; }): void;
正在描述一个方法dispatchEvent
接受一个类型的参数{ type: string; [attachment: string]: any; }
.
为了使该类型更容易理解,请查看定义该类型的接口:
interface IEvent {
type: string;
[attachment: string]: any;
}
这告诉编译器该类型的对象IEvent
将有一个名为的字符串属性type
,和元素IEvent
通过字符串索引访问的对象将是any
type.
所以,像这样的东西编译时不会出错:
interface IEvent {
type: string;
[attachment: string]: any;
}
let myEvent: IEvent = {
type: 'some-event-type'
};
let eventType: string = myEvent["type"];