TypeScript 5中如何使用const泛型键创建含指定键的对象
TypeScript 5.x动态对象构建函数类型错误解决方法
你的问题源于TypeScript对计算属性的默认类型推断:当使用[key]: "wow"这种计算属性语法时,TypeScript会把对象的索引类型推断为string,而非你通过const Key指定的具体字面量类型,因此返回值{ [x: string]: string }无法匹配Record<Key, "wow">的类型要求。
以下是两种可靠的解决方式:
方法一:类型断言(简洁直接)
直接将返回值断言为目标类型,由于你已经用const约束了Key为字面量类型,这个断言是完全安全的:
function testFunction<const Key extends string>(key: Key): Record<Key, "wow"> { return { [key]: "wow" } as Record<Key, "wow">; }
方法二:利用as const强化类型推断
通过as const让TypeScript保留对象的字面量类型特征,再转换为目标类型:
function testFunction<const Key extends string>(key: Key): Record<Key, "wow"> { return { [key]: "wow" } as const as Record<Key, "wow">; }
验证效果:调用函数后,变量类型会符合你的预期:
// const result: { "test": "wow" } const result = testFunction("test");
两种方法都能保证result的类型是具体的字面量键值对,而非宽泛的字符串索引类型。
内容的提问来源于stack exchange,提问作者ComradeVanti
相关产品推荐
相关产品推荐

