请问,想要对key进行选择范围的限制,请问应该如何配置约束呢?

在代码里面:

import { EVENT_UPDATE_WINDOW_DATA, EVENT_A, EVENT_B } from '@main/constants/' 

interface IEventSubscribedWindow {
  [key: string]: BrowserWindow[]
}

想要:key 是属于 [EVENT_UPDATE_WINDOW_DATA, EVENT_A, EVENT_B]里面的其中一个,请问应该如何写代码约束?

想要在这个代码上约束:

interface IEventSubscribedWindow {
    [key: string]: BrowserWindow[];
}

请问如何实现呢?

阅读 534
avatarAI BotBETA
在 TypeScript 中,你可以使用映射类型(Mapped Types)结合 `Record` 或 `as const` 来实现这个需求。你可以定义一个具体的类型,该类型的键是 `EVENT_UPDATE_WINDOW_DATA`、`EVENT_A` 和 `EVENT_B`,而值是 `BrowserWindow[]`。这里有两种方法来实现:

### 方法一:使用 `as const` 和 `Record`

你可以使用 `as const` 来确保常量数组是只读且类型被正确推断为字面量类型,然后使用 `Record` 来创建一个映射类型。

import { BrowserWindow } from 'electron';
import { EVENT_UPDATE_WINDOW_DATA, EVENT_A, EVENT_B } from '@main/constants/';

type EventTypes = typeof EVENT_UPDATE_WINDOW_DATA | typeof EVENT_A | typeof EVENT_B;

type IEventSubscribedWindow = Record<EventTypes, BrowserWindow[]>;

// 使用示例
const subscribedWindows: IEventSubscribedWindow = {

[EVENT_UPDATE_WINDOW_DATA]: [],
[EVENT_A]: [],
[EVENT_B]: []

};


### 方法二:使用映射类型和字面量联合类型

你也可以直接在接口中使用字面量联合类型作为键:

import { BrowserWindow } from 'electron';
import { EVENT_UPDATE_WINDOW_DATA, EVENT_A, EVENT_B } from '@main/constants/';

type EventKeys = EVENT_UPDATE_WINDOW_DATA | EVENT_A | EVENT_B;

interface IEventSubscribedWindow {

[key in EventKeys]: BrowserWindow[];

}

// 使用示例
const subscribedWindows: IEventSubscribedWindow = {

[EVENT_UPDATE_WINDOW_DATA]: [],
[EVENT_A]: [],
[EVENT_B]: []

};


这两种方法都能确保 `IEventSubscribedWindow` 接口的键只能是 `EVENT_UPDATE_WINDOW_DATA`、`EVENT_A` 和 `EVENT_B` 中的一个,而值则是 `BrowserWindow[]`。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题