import { Checking, type Test } from "hry-types"; import type { CurrentTargetDataset, Dataset, Detail, Mark, TargetDataset, WMBaseEvent, WMCustomEvent, } from "../../../../types/OfficialTypeAlias"; import type { ComponentDoc } from "../../../DefineComponent/ReturnType/ComponentDoc"; import { RootComponent } from "../.."; import type { Bubbles, Capture } from "../../CustomEvents/CustomEventsTag"; /** * 1. 事件参数e的类型默认为官方基础类型 */ RootComponent()({ events: { aaa(e) { Checking; }, }, }); /** * 2. 事件参数e可通过WMBaseEvent和WMCustomEvent(多一个detail类型)定义内部类型。 */ RootComponent()({ events: { // 通过WMCustomEvent定义detai,mark,CurrentTargetDataset,targetDataset数据类型 customA( e: WMCustomEvent< { detailData: string }, { markData: { id: string } }, { currentTargetDatasetData: string }, { targetDatasetData: number } >, ) { Checking; const markData = e.mark!.markData; Checking; Checking; Checking; }, // 通过Detail定义detai类型 bbb(e: Detail<{ str: string }>) { Checking; }, // 通过Mark定义mark类型 ccc(e: Mark<{ id: string }>) { const markId = e.mark!.id; Checking; }, // 通过CurrentTargetDataset定义currentTarget.dataset类型 ddd(e: CurrentTargetDataset<{ str: string }>) { Checking; }, // 通过TargetDataset定义target.dateset类型 eee(e: TargetDataset<{ str: string }>) { Checking; }, }, }); type ComponentDocA = ComponentDoc<{ properties: { aaa_str: string; }; customEvents: { aaa_str: string; aaa_num: number | Bubbles; }; }>; type ComponentDocB = ComponentDoc<{ customEvents: { bbb_str: string; bbb_num: number | Capture; }; }>; /** * 6. 当传入子组件文档列表时,提供子组件的冒泡和捕获事件的字段提示 */ const RootDoc = RootComponent<[ComponentDocA, ComponentDocB]>()({ events: { // 后缀bubbles表示为子组件的冒泡事件 aaa_num_bubbles(e) { Checking; }, // 后缀加catch表示阻止事件传递,当前组件类型将不会向上传递此事件类型。 aaa_num_bubbles_catch(e) { Checking; }, // 后缀capture表示是捕获事件 bbb_num_capture(e: Dataset<{ currentTargetDataset: number }, { targetDataset: string }, number>) { Checking; Checking; Checking; }, // 后缀加catch表示阻止事件传递,由于捕获事件向下阻止,所以当发现捕获事件不触发时应查看上级组件是否有阻止事件。 bbb_num_capture_catch(e) { Checking; }, }, }); type RootDocExpect = { events: { aaa_num_bubbles: (e: Detail) => void; aaa_num_bubbles_catch: (e: Detail) => void; bbb_num_capture: (e: Dataset<{ currentTargetDataset: number }, { targetDataset: string }, number>) => void; bbb_num_capture_catch: (e: Detail) => void; }; }; // 7 返回EventsDoc正常 Checking; /** * 8 events字段为`{}`时,返回类型中无events字段。 */ const EmptyEventsFields = RootComponent<[ComponentDocA, ComponentDocB]>()({ events: {}, }); Checking; /** * 9 没有events字段时,返回类型中无events字段。 */ const NoEventsFields = RootComponent<[ComponentDocA, ComponentDocB]>()({}); Checking;