在使用websockets的应用程序中,我想将socket关闭代码映射到字符串,这样在关闭事件时,我可以从数字代码中获取消息。目前,我只是从“常量”模块导出一个对象,如下所示:
export const CloseCodes: { [index: number]: string } = {
1000: "Normal closure",
1001: "The endpoint is going away",
1002: "The endpoint is terminating"
// etc.
}
在socket close上,我可以通过
event.code
将CloseCodes[event.code]
映射到字符串,这是我想要的,但是我也可以执行CloseCodes[event.code] = "garbage"
、CloseCodes[1234]="hello"
和delete(CloseCodes[event.code])
,所有这些都是不需要的。有没有办法为这种类型的使用创建一个只读的数字索引结构?我在找一种打字的方式来做这件事,而不是es6Object.defineProperty(...)
的方式。 最佳答案
是的,简单地用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!
我相信在TypeScript2.0中引入了如上所示的方式使用
readonly
,所以您至少需要使用那个版本的TypeScript。还要注意,不允许delete操作符was a very recent TypeScript change,因此您可能还没有在项目中看到这种行为。