TypeScript中能否让Map根据键自动推断对应值的类型?
TypeScript中实现Map键值类型的关联推断
能实现,但不能用你示例中的Map<Type, Type[]>写法——这种写法会让TypeScript将键类型统一推断为number | string | boolean,值类型统一为(number | string | boolean)[],无法建立键与对应值类型的精准关联。
下面是两种可行的实现方式:
方式一:使用as const断言自动推导类型
通过as const断言让TypeScript保留初始数组中每个条目的具体类型,Map会自动建立键与值的类型关联:
const myMap = new Map([ [1, [1, 2, 3, 4]], ["foo", ["apple", "grape", "banana"]], [true, [true, false, true]], ] as const);
此时调用myMap.get(false),TypeScript会准确推断返回值为boolean[] | undefined;调用myMap.get("foo")会返回string[] | undefined,完全符合预期。
方式二:显式定义联合条目类型
如果需要显式声明类型,可以先定义包含键值类型关联的联合元组类型,再以此约束Map:
type MapEntries = | [number, number[]] | [string, string[]] | [boolean, boolean[]]; const myMap = new Map<MapEntries[0], MapEntries[1]>([ [1, [1, 2, 3, 4]], ["foo", ["apple", "grape", "banana"]], [true, [true, false, true]], ]);
这种写法同样能让TypeScript识别不同键对应的具体值类型,myMap.get(false)的返回值会被推断为boolean[] | undefined。
内容的提问来源于stack exchange,提问作者Robo Robok
相关产品推荐
相关产品推荐

