在使用WebSockets的应用程序中,我想将套接字关闭代码映射到字符串,以便在关闭事件时,我可以从数字代码中获取消息。目前我只是从“常量”模块中导出一个对象,如下所示:
QMenuBar::item
在关闭套接字时,我可以通过export const CloseCodes: { [index: number]: string } = {
1000: "Normal closure",
1001: "The endpoint is going away",
1002: "The endpoint is terminating"
// etc.
}
将event.code
映射到字符串,这是我想要的,但我也可以CloseCodes[event.code]
,CloseCodes[event.code] = "garbage"
和{ {1}},所有这些都是不受欢迎的。有没有办法为这种类型的用法创建一个只读的数字索引结构?我正在寻找一种TypeScript方式,而不是ES6 CloseCodes[1234]="hello"
方式。
答案 0 :(得分:2)
是的,只需使用readonly index signature声明:
export const CloseCodes: { readonly [index: number]: string } = {
1000: "Normal closure",
1001: "The endpoint is going away",
1002: "The endpoint is terminating"
// etc.
}
// Both "Index signature in type '{ readonly [index: number]: string; }' only permits reading." errors:
CloseCodes[1000] = "bad"; // error!
delete CloseCodes[1000]; // error!
我认为在TypeScript 2.0中引入了如上所示的方式使用readonly
,因此您至少需要使用该版本的TypeScript。另请注意,不允许删除操作符was a very recent TypeScript change,因此您可能还没有在项目中看到此行为。