TypeScript可选对象参数冗余问题:如何简化重复代码?
简化TypeScript可选对象参数默认值的写法
你可以用以下几种方式消除重复代码:
1. 给参数默认空对象,解构时设属性默认值
直接把参数的默认值设为空对象,解构时单独给stop指定默认值,效果和原代码完全一致,还避免了重复写{ stop: false }:
const myfunc = ({ stop = false }: { stop?: boolean } = {}) => { // do stuff with "stop" }
原理是:当调用myfunc()不传参数时,参数会被赋值为{},解构stop时找不到对应属性,就会使用默认值false,和你原来写{ stop: false }作为默认参数的结果一样。
2. 定义类型别名复用类型
如果后续可能扩展参数属性,或者想让类型更清晰,可以先定义一个类型别名,再使用:
type MyFuncOptions = { stop?: boolean }; const myfunc = ({ stop = false }: MyFuncOptions = {}) => { // do stuff with "stop" }
这种方式在参数较多时更易维护,修改类型只需改一次别名即可。
额外提示
如果你的参数里有多个可选属性,每个都可以在解构时单独设置默认值,比如:
type MyFuncOptions = { stop?: boolean; delay?: number }; const myfunc = ({ stop = false, delay = 1000 }: MyFuncOptions = {}) => { // do stuff with stop and delay }
这样不管传部分参数还是不传,都能保证每个属性有合理的默认值。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

