You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TypeScript字符串字面量类型转换为新对象类型的键?

错误原因

你写法的问题出在keyof T的使用上。当T是字符串字面量联合类型时,keyof T取的是所有字符串共有的方法属性(比如toString、substring这类),而不是把联合类型的每个成员作为键来遍历,所以你定义出来的LetterFlags根本不是你预期的对象类型,才会触发类型不匹配报错。


解决方案

要遍历联合类型的每个成员作为对象键,直接在映射类型里写[k in T]即可,正确的实现如下:

// 自定义泛型实现
type Flags<T extends PropertyKey> = { [k in T]: boolean };
type Letters = "a" | "b" | "c" | "d" | "e";
type LetterFlags = Flags<Letters>;

你也可以直接用TypeScript内置的Record工具类,不需要自己写泛型:

type Letters = "a" | "b" | "c" | "d" | "e";
type LetterFlags = Record<Letters, boolean>;

修改后再定义你的变量就不会有类型错误了。

内容的提问来源于stack exchange,提问作者ezgrs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:24:07