TypeScript:如何创建只读数字索引对象

时间:2017-01-22 12:27:40

标签: typescript indexing readonly

在使用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"方式。

1 个答案:

答案 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,因此您可能还没有在项目中看到此行为。