结合枚举和计算属性名称的对象字面量

Joe - Elasticsearch 手册

我有一个枚举

enum Action {
  action1 = 'action1',
  action2 = 'action2'
};

我将其值用作对象中的计算属性名称:

/*
  ...to be able to use these as values, not just types
*/
const ActionState = {
  [Action.action1]: 'actionState1' as const,
  [Action.action2]: 'actionState2' as const,
};

我想定义一个类型/一个接口,其键是将 an 映射Action到相应的模板文字ActionState

/*
  {
    actionState1: boolean;
    actionState2: boolean;
  }
*/
type ActionModelState {
  [key in keyof Action as `${typeof ActionState[key]}`]: boolean // all booleans but I need the keys to be restricted 
}

// throwing:
// Type 'key' cannot be used to index type '{ action1: "actionState1"; action2: "actionState2"; }'.

我将用它扩展我的基本类型:

type BaseAction = {
  id: number;
  foo: string;
  bar: string;
};

来形成:

type EnrichedAction = BaseAction & ActionModelState;

最终得到:

const enrichedAction: EnrichedAction = {
  id: 123,
  foo: 'foo',
  bar: 'bar',
  actionState1: true,
  actionState2: false,
}

ActionModelState当我清楚地知道Actionas的成员时,我该如何定义ActionState编译器抱怨说:

类型 'key' 不能用于索引类型 '{ action1: "actionState1"; 动作2:“动作状态2”;}'

但我想typeof key === keyof Action我究竟做错了什么?

游乐场链接

卡亚3

你根本不需要keyof Action这里;类型Action已经是这些字符串值的联合。所以你想要key in Action,不是key in keyof Action

type ActionModelState = {
  [key in Action as `${typeof ActionState[key]}`]: boolean
}

游乐场链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

结合枚举和计算属性名称的对象字面量

对象字面量只能指定已知属性,类型中不存在“名称”但类型存在

在 *ngFor 中获取对象字面量顶级名称

结合对象和属性

属性值不会通过对象字面量定义应用

对象字面量只能指定已知属性

如何访问javascript数组中对象字面量的属性

无法将对象字面量分配给`...`,因为对象字面量[1]中缺少属性`...`,但存在于`...`中

对象字面量的 TS 接口

对象字面量构造函数

javascript 对象字面量——公式

对象字面量只能指定已知属性,而“消息”在“ChatMessage[]”类型中不存在

打字稿。如何指定对象字面量属性子集的类型?

JS对象字面量或数组如何根据判断判断是否创建某些属性

一个对象字面量不能有多个同名的属性

对象字面量问题 - 返回闭包

JavaScript 命名空间对象字面量

使用 Flow 定义对象字面量

JavaScript 中的对象字面量问题

模块 vs 类 vs 对象字面量

对象字面量中的自引用

字面量展平 NULL 对象或数组

JavaScript 对象字面量和 Python 字典是一回事吗?

错误 TS2322:对象字面量只能指定已知属性,并且类型中不存在“标签”

Three.js“未捕获的TypeError:无法读取未定义的属性'render'”错误与对象字面量

TypeScript 错误:对象字面量只能指定已知属性,并且类型“DeepPartial<Document>”中不存在“...”

如何在将字面量与Typescript结合使用的同时使用字面量来防止泛型类型变窄?

从c#中任何枚举类型的枚举对象获取枚举名称和字符串值

如何结合枚举和标志?