TypeScript混合接口类型实现遇阻,计算属性名报错求助
解决TypeScript接口计算属性名报错问题
先明确你写法的问题:你在接口里用了运行时的值keys.itemFour生成计算属性名,但TypeScript接口的计算属性名必须是类型层面的字面量(比如'itemFour'这类固定字符串)或者unique symbol类型。keys.itemFour是布尔值,转成模板字符串后类型是"true" | "false",既不是固定键名,也不符合接口计算属性的要求,所以触发报错。
给你两种无需逐个声明属性的解决方案:
方案1:直接复用自动推导的类型
TypeScript会自动为const list推导精准的类型,你直接用typeof提取即可:
import { list } from 'the_above'; // 直接复用list的自动推导类型 type ListTypes = typeof list;
推导后的ListTypes会自动匹配原对象结构:
type ListTypes = { itemOne: string; itemTwo: string; itemThree: string; itemFour: boolean; }
方案2:手动构建自定义类型(适用于需要扩展/修改的场景)
如果要手动控制类型规则,可以用映射类型结合keyof实现:
import { list } from 'the_above'; // 获取list的所有键名类型 type ListKeys = keyof typeof list; // 排除itemFour后统一设为string类型,再与itemFour的boolean类型交叉合并 type ListTypes = { [K in Exclude<ListKeys, 'itemFour'>]: string; } & { itemFour: boolean; };
内容的提问来源于stack exchange,提问作者Sharper
相关产品推荐
相关产品推荐

