实现思路
- 定义状态类型:使用 TypeScript 的
enum
定义按钮的三种状态:loading
、disabled
、normal
。
- 定义按钮组件类型:创建一个包含状态和对应交互逻辑函数的类型。
- 类型守卫函数:编写类型守卫函数,用于判断按钮当前的状态,并根据状态执行相应的逻辑。
关键代码片段
// 定义按钮状态枚举
enum ButtonState {
Loading = 'loading',
Disabled = 'disabled',
Normal = 'normal'
}
// 定义按钮组件类型
type ButtonComponent = {
state: ButtonState;
onClick: () => void;
};
// 类型守卫函数
function handleButtonClick(button: ButtonComponent) {
if (button.state === ButtonState.Loading) {
console.log('按钮处于loading状态,无法点击');
} else if (button.state === ButtonState.Disabled) {
console.log('按钮处于disabled状态,无法点击');
} else if (button.state === ButtonState.Normal) {
button.onClick();
}
}
// 示例按钮组件
const myButton: ButtonComponent = {
state: ButtonState.Normal,
onClick: () => {
console.log('按钮被点击');
}
};
// 调用类型守卫函数
handleButtonClick(myButton);