antd源码中类型为啥要用tuple,直接写不明显么?
阅读antd源码过程中发现有些组件类型用tuple,不明白为啥要这样,全局搜索也没发现公用的地方,为啥不直接了当的写联合类型?
const tuple = <T extends string[]>(...args: T) => args;
const ButtonTypes = tuple('default', 'primary', 'ghost', 'dashed', 'link', 'text');
type ButtonType = typeof ButtonTypes[number];
// 'default' | 'primary' | 'ghost'| 'dashed' | 'link' | 'text'
为啥不直接写
type ButtonType = 'default' | 'primary' | 'ghost'| 'dashed' | 'link' | 'text'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
没写是 React 还是 Vue 的,我就当作是 Vue 的。
这么写的好处是可以给
props
的validator
复用。那个tuple
实际就是个数组。比如可以:
这样当你瞎传一个 String 进去,控制台就会有警告。你要是单纯的用 TS 类型别名,它只是个标记,tsc 编译后这些玩意儿就擦除掉了。
当然了,我举的例子是为了更好地说明
props
是如何复用的,antd 里还不是这么直接裸写的validator
,而是用了一个 vue-types 库下封装好的oneOf
工具方法,但原理是一样的。React 版差不多,因为
oneOf
这个方法就是从 React 那学来的。