baidu / baidu/amis

增强事件动作里的TS类型, 以便vscode更好的提示和校验

Open
#4,189 0 comments 0 reactions 1 assignee Claimed by @hsm-lv View on GitHub
enhancement
Dominant language
TypeScript
Stars
18.9k
Forks
2.7k
PR merge metrics
No merged PRs in 30d

Description

#### 是否关联于某个问题吗:

现在的ListenAction是直接定义成了一个父类型, 而不是多个事件动作类型的联合类型, 导致在ts代码里使用的时候, 无法根据actionType自动提示和校验事件类型.

#### 预期的解决方案:

改造成类似SchemaObject的方案.

```typescript
// 监听器动作定义
export interface IListenerAction {
actionType: string; // 动作类型 逻辑动作|自定义(脚本支撑)|reload|url|ajax|dialog|drawer 其他扩充的组件动作
description?: string; // 事件描述,actionType: broadcast
componentId?: string; // 组件ID,用于直接执行指定组件的动作
args?: Record; // 参数,可以配置数据映射
outputVar?: string; // 输出数据变量名
preventDefault?: boolean; // 阻止原有组件的动作行为
stopPropagation?: boolean; // 阻止后续的事件处理器执行
expression?: string; // 执行条件
}

export type ListenerAction =
| IToastAction
| IBroadcastAction
| IAjaxAction
| ICmptAction
| ICopyAction
| ICustomAction
| IAlertAction
| IConfirmAction
| IDialogAction
| ICloseDialogAction
| IDrawerAction
| ICloseDrawerAction
| IEmailAction
| ILinkAction
| LogicAction
| IPageGoAction;

export interface ILogicAction extends IListenerAction {
children?: ListenerAction[]; // 子动作
}

// 逻辑动作类型,支持并行、排他(switch)、循环(支持continue和break)
export type LogicAction =
| IParallelAction
| ISwitchAction
| ILoopAction
| IContinueAction
| IBreakAction;
```

#### 其他可接受方案:

目前临时可以通过`as IToastAction`来解决.

#### 任何附加信息:

PR已经提交, 欢迎合入.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.