TypeScript中如何不使用any定义可通过socketId索引的peers嵌套对象类型
最优声明方案
首先先定义单个Peer项的类型:
// 可根据你的实际业务调整属性的具体类型,以下为WebRTC场景下的默认类型示例 interface Peer { initiator: boolean; config: RTCConfiguration; stream: MediaStream; }
然后声明peers变量,用TS内置的Record工具类型实现字符串索引访问:
let peers: Record<string, Peer> = {};
说明
Record<string, Peer>等价于手写索引签名{ [socketId: string]: Peer },是TS针对键值对对象的标准简化写法,可读性更高。- 如果你的
connUserSocketId有更精确的类型(比如是固定的字符串字面量联合),可以把Record的第一个泛型参数替换为对应的类型,能获得更严格的类型校验。 - 如果开启了
strictNullChecks配置,访问peers[connUserSocketId]时返回的类型为Peer | undefined,你可以通过提前判空或者加非空断言!来处理。
内容的提问来源于stack exchange,提问作者AMendis
相关产品推荐
相关产品推荐

