Typescript 中的字段应位于方括号中是什么意思?

2024-01-26

我在三个 d.ts 中遇到了这一行:

dispatchEvent(event: { type: string; [attachment: string]: any; }): void;

并想知道这意味着什么。
我知道这意味着一个名为dispatchEvent的函数,它接受一个具有成员类型的类型的参数,但我不确定是什么:

[attachment: string]: any;

means.


这是一个索引签名。来自打字稿文档 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"];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 中的字段应位于方括号中是什么意思? 的相关文章

随机推荐