From fc18f9717c9c1544491b62a065a5dd44200fd9ee Mon Sep 17 00:00:00 2001 From: zhangfisher Date: Tue, 3 Sep 2024 15:19:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(types):=20=E6=96=B0=E5=A2=9E=E5=8A=A0requi?= =?UTF-8?q?redKeys=E7=94=A8=E4=BA=8E=E5=A3=B0=E6=98=8E=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=9F=90=E4=B8=AA=E5=AD=97=E6=AE=B5=E4=B8=BA?= =?UTF-8?q?=E5=BF=85=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide/types.md | 21 +++++++++++++++++++++ src/events/flexEvent.ts | 12 ++++++------ src/types/index.ts | 4 ++-- src/types/requiredKeys.ts | 26 ++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 src/types/requiredKeys.ts diff --git a/docs/guide/types.md b/docs/guide/types.md index 43fa6f3..2a1581d 100644 --- a/docs/guide/types.md +++ b/docs/guide/types.md @@ -419,3 +419,24 @@ type KeyType = ObjectKeyOf ``` + + +# requiredKeys + + 用于获取对象 `T` 中指定的属性键 Keys,并将这些键对应的属性设置为必选。 + + ```ts + type Person { + name?: string; + age?: number; + } + // 我们想要创建一个新的类型,其中 name 属性是必选的: + type PersonWithRequiredName = RequiredKeys; + + // 这将创建一个新的类型,等同于: + type PersonWithRequiredName = { + name: string; + age?: number; + } + + ``` \ No newline at end of file diff --git a/src/events/flexEvent.ts b/src/events/flexEvent.ts index d177af7..1a56449 100644 --- a/src/events/flexEvent.ts +++ b/src/events/flexEvent.ts @@ -56,13 +56,13 @@ export type FlexListenerRegistry = Map> /** * Event: 指定一个通用事件类型 + * + * */ -export class FlexEvent= Record>{ - // {"<事件名称>":{:[Callback,<侦听次数>]}} - private _listeners:FlexListenerRegistry= new Map() - private _options:Required - // 保留最后一次触发的消息,key=事件名称,value=消息 - private _lastMessage:Record = {} +export class FlexEvent= Record>{ + private _listeners:FlexListenerRegistry= new Map() // {"<事件名称>":{:[Callback,<侦听次数>]}} + private _options:Required + private _lastMessage:Record = {} // 保留最后一次触发的消息,key=事件名称,value=消息 static listenerSeqId:number = 0 constructor(options:FlexEventOptions = {ignoreError:true,context:null}){ this._options = assignObject({ diff --git a/src/types/index.ts b/src/types/index.ts index 0a48a0d..fbf27aa 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -21,7 +21,7 @@ export * from "./optional" export * from "./valueOf" export * from "./changeReturns" export * from "./dict" - +export * from "./requiredKeys" // export * from "./typedClassDecorator" -// export * from "./objectPath" \ No newline at end of file +// export * from "./objectPath" diff --git a/src/types/requiredKeys.ts b/src/types/requiredKeys.ts new file mode 100644 index 0000000..e494ccd --- /dev/null +++ b/src/types/requiredKeys.ts @@ -0,0 +1,26 @@ + + +/** + * + * 用于获取对象 T 中指定的属性键 Keys,并将这些键对应的属性设置为必选 + * + * @example + * 假设有一个接口 Person { + * name?: string; + * age?: number; + * } + * 我们想要创建一个新的类型,其中 name 属性是必选的: + * type PersonWithRequiredName = RequiredKeys; + * 这将创建一个新的类型,等同于: + * type PersonWithRequiredName = { + * name: string; + * age?: number; + * } + * + * @param T 必须是一个对象类型 + * @param keys 必须是 T 的键的联合类型 + * + */ +export type RequiredKeys = T & Required> + +