【发布时间】:2020-09-16 01:44:49
【问题描述】:
我在 typescript 中有一个使用命名参数的方法,如下所示
public foo({x, y, z , m , n} : {x:string, y: number, z: number, m?:string, n?:number}) {
}
参数m 和n 将由另一个对象提供,例如
const default = { m : 'M', n :10, o:6 }
现在我想像下面这样调用 foo 并且我希望添加默认参数而不在调用中显式传递它们
foo({x:'x', y: 5, z: 0})
所以我的问题是如何在foo 的正文中应用default 或在调用之前以某种方式拦截foo 并应用default
public foo({x, y, z , m , n} = {x:string, y: number, z: number, m?:string, n?:number}) {
// for example how to apply default here
}
请注意,为简单起见,我减少了参数数量
我也知道以下这些解决方案,我正在寻找样板代码更少的东西
public foo({x, y, z , m , n} = {x:string, y: number, z: number, m?:string, n?:number}) {
if (!m) {
m = default.m;
}
if (!n) {
n = default.n;
}
}
或
foo({...default, x:'x', y: 5, z: 0 });
【问题讨论】:
-
您可能可以在这里使用装饰器做一些事情,但我不确定它是否会比
foo({...default, x:'x', y: 5, z: 0 });少得多的样板。不过,也许更可重用。
标签: javascript typescript named-parameters