TypeScript:如何创建只读数字索引对象
TypeScript: How to create readonly numerically indexed object
在使用 WebSockets 的应用程序中,我想将套接字关闭代码映射到字符串,以便在关闭事件时,我可以从数字代码中获取消息。目前我只是从 "constants" 模块中导出一个对象,如下所示:
export const CloseCodes: { [index: number]: string } = {
1000: "Normal closure",
1001: "The endpoint is going away",
1002: "The endpoint is terminating"
// etc.
}
在套接字关闭时,我可以通过 CloseCodes[event.code]
将 event.code
映射到一个字符串,这是我想要的,但我也可以做 CloseCodes[event.code] = "garbage"
、CloseCodes[1234]="hello"
和 delete(CloseCodes[event.code])
,所有这些都是不可取的。有没有办法为这种用法创建一个只读的数字索引结构?我正在寻找执行此操作的 TypeScript 方式,而不是 ES6 Object.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!
我相信以上述方式使用 readonly
是在 TypeScript 2.0 中引入的,因此您至少需要使用该版本的 TypeScript。另请注意,不允许删除运算符 was a very recent TypeScript change,因此您可能不会在项目中看到此行为。
在使用 WebSockets 的应用程序中,我想将套接字关闭代码映射到字符串,以便在关闭事件时,我可以从数字代码中获取消息。目前我只是从 "constants" 模块中导出一个对象,如下所示:
export const CloseCodes: { [index: number]: string } = {
1000: "Normal closure",
1001: "The endpoint is going away",
1002: "The endpoint is terminating"
// etc.
}
在套接字关闭时,我可以通过 CloseCodes[event.code]
将 event.code
映射到一个字符串,这是我想要的,但我也可以做 CloseCodes[event.code] = "garbage"
、CloseCodes[1234]="hello"
和 delete(CloseCodes[event.code])
,所有这些都是不可取的。有没有办法为这种用法创建一个只读的数字索引结构?我正在寻找执行此操作的 TypeScript 方式,而不是 ES6 Object.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!
我相信以上述方式使用 readonly
是在 TypeScript 2.0 中引入的,因此您至少需要使用该版本的 TypeScript。另请注意,不允许删除运算符 was a very recent TypeScript change,因此您可能不会在项目中看到此行为。