需求分析
按钮类型
以type属性作为关键字,指定不同的type,按钮将自动显示不同的按钮类型:primary、default、danger、link
是否禁用
以disabled为关键字,值为boolean类型,为true时要禁用按钮行为,按钮整体样式置灰
大小
以size为关键字,指定不同的size显示不同的大小,包括字体大小变化
原生属性
需要支持按钮的默认属性
基本实现
定义类型

(除了默认的样式type如primary、danger外,也同时允许用户通过类型className自定义样式;lg、sm、normal分别标识不同的按钮大小;当指向disabled时将呈现不同的按钮样式;children则是按钮内部显示的子元素;href则是type为link时必须给定的值,将用作a标签的href属性)
类名

(默认情况下,按钮的样式为su-btn;当用户指定了type或size时切换不同的类目以达到不同样式的展示;同时也将用户自定义的类型传入)
主结构

(当type为link时渲染成a标签,其他情况均视为button按钮)
完整代码

(通过rest实现兼容button或a标签的原生属性的目的;通过defaultProps设置默认值)
使用

(框红的位置是因为之前定义的type和原生的接口冲突而修正的)

问题
当前组件尚不支持原生属性编辑器智能提示,这是因为未指定类型导致的

(在types文件下新增button按钮和a链接的props接口)

(在button组件中使用交叉类型合并,并通过Partial函数将接口中所有值变为可选)
type属性报错
这是因为type属性已经在react提供的接口中被定义了