TypeScript中如何定义含动态键名但子结构固定的接口?
实现含动态子键的TypeScript接口
完全可以实现你想要的结构,核心思路是将固定子结构抽成独立接口,再给动态键的层级加上索引签名,具体写法如下:
- 先定义固定的子结构接口
// 定义每个bookId对应的固定子结构 interface BookInfo { token: string; accessKey: string; }
- 再定义顶层的Library接口,给Books内部添加索引签名
interface Library { Books: { // 动态bookId作为键,值必须符合BookInfo结构 [bookId: string]: BookInfo; }; }
这样定义后,既保留了Books这个层级结构,又能适配任意动态生成的bookId,同时每个bookId对应的子结构会被TypeScript严格校验,完全满足你的需求。
举个使用示例:
// 符合类型约束的API返回数据 const apiResponse: Library = { Books: { "book-001": { token: "t-123", accessKey: "k-456" }, "book-xyz": { token: "t-789", accessKey: "k-0ab" } } }; // 正常访问动态键的属性 console.log(apiResponse.Books["book-001"].token);
内容的提问来源于stack exchange,提问作者dcp3450
相关产品推荐
相关产品推荐

