如何以类型安全的方式将元组用作TypeScript的Map键?
实现支持任意长度元组作为键的TypeScript字典(类似Python dict)
在TypeScript中,Map无法直接将数组或元组用作键——因为这类引用类型是按引用地址而非值内容进行比较的。常见的临时解决方法是把元组序列化为字符串(比如用JSON.stringify()),再用这个字符串作为Map的键,但这种方式有明显缺陷:丢失类型信息。
比如这段代码:
type Value = string | number; const map = new Map<string, number>(); map.set(JSON.stringify(["a", 1, "4"]), 1); for (const entry of map.entries()) { // 键的类型完全丢失 // 就算手动把它强转为Value数组也没用,无法区分元素原本的类型 // 比如这里的1是数字,"4"是字符串,解析后虽能得到对应值,但类型系统无法追踪这种区别 const key = JSON.parse(entry[0]); }
反观Python的dict,可以直接用元组作为键:元组是按值比较的,同时能完整保留每个元素的类型信息,完全不存在上述问题。
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

