可以在接口中将联合类型用作键吗?例如,我想做这样的事情:

interface IMargin {
  [key in 'foo' | 'bar']: boolean;
}

但我有一个错误:

接口中的计算(computed)属性名称必须引用类型为文字类型或"唯一符号"类型的表达式.ts(1169)

有什么办法吗?

用例将一个值数组转换为一个接口:

const possibleTypes = ['foo', 'bar'];
interface Types {
    foo?: boolean;
    bar?: boolean;
}

推荐答案

接口不支持映射类型(这正是您在这里想要的).您可以使用类型别名,对于大多数用途,它的工作原理应该是相同的(并非所有情况下,但如果已知类型,则可以像实现接口一样实现类型别名).

const possibleTypes = (<T extends string[]>(...o: T) => o)('foo', 'bar');
type Types = Record<typeof possibleTypes[number], boolean>

映射类型Record应该在这里工作

Typescript相关问答推荐

Typescript联合类型-字段类型覆盖

TypScript错误:类型{ children:ReactNode; }与动态React组件中的IntrinsicLedger类型没有共同的属性

具有匹配键的通用对象界面

Tailwind CSS样式不在Svelte应用程序中呈现

有没有可能使用redux工具包的中间件同时监听状态的变化和操作

使用ngrok解析Angular 时出现HTTP故障

扩展函数签名中的参数类型,而不使用泛型

异步动态生成Playwright测试,显示未找到测试

如何提取密钥及其对应的属性类型,以供在新类型中使用?

如何在LucideAngular 添加自定义图标以及如何使用它们

从子类构造函数推断父类泛型类型

如何在已知基类的任何子类上使用`extends`?

是否可以判断某个类型是否已合并为内部类型?

刷新页面时,TypeScrip Redux丢失状态

不带其他属性的精确函数返回类型

常量类型参数回退类型

类型';字符串|数字';不可分配给类型';未定义';.类型';字符串';不可分配给类型';未定义';

专用路由组件不能从挂钩推断类型

为什么&Quot;元素隐式具有';Any';类型,因为...即使我已经打字了,也不能作为索引显示错误吗?

JSX.Element';不可分配给类型';ReactNode';React功能HOC