设置作为参数传递的 TypeScript 对象的默认值

新手上路,请多包涵
function sayName(params: {firstName: string; lastName?: string}) {
    params.lastName = params.lastName || 'smith';  // <<-- any better alternative to this?
    var name = params.firstName + params.lastName
    alert(name);
}

sayName({firstName: 'bob'});

我曾想象过这样的事情可能会奏效:

 function sayName(params: {firstName: string; lastName: string = 'smith'}) {

显然,如果这些是简单的论点,您可以这样做:

 function sayName(firstName: string, lastName = 'smith') {
    var name = firstName + lastName;
    alert(name);
}

sayName('bob');

在咖啡脚本中,您可以访问条件存在运算符,因此可以这样做:

 param.lastName ?= 'smith'

编译成javascript:

 if (param.lastName == null) {
    param.lastName = 'smith';
}

原文由 AJP 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

实际上,现在似乎有一个简单的方法。以下代码适用于 TypeScript 1.5:

 function sayName({ first, last = 'Smith' }: {first: string; last?: string }): void {
  const name = first + ' ' + last;
  console.log(name);
}

sayName({ first: 'Bob' });

诀窍是首先将要从参数对象中选择的键放在括号中,使用 key=value 表示任何默认值。接下来是 : 和类型声明。

这与您尝试做的有点不同,因为您没有完整的 params 对象,而是有取消引用的变量。

如果您想将任何内容传递给函数,请为该类型中的所有键添加 ? 并在类型声明后添加默认值 ={}

 function sayName({first='Bob',last='Smith'}: {first?: string; last?: string}={}){
    var name = first + " " + last;
    alert(name);
}

sayName();

原文由 jpadvo 发布,翻译遵循 CC BY-SA 4.0 许可协议

Typescript 现在支持默认参数:

https://www.typescriptlang.org/docs/handbook/functions.html

此外,添加默认值允许您省略类型声明,因为它可以从默认值推断:

 function sayName(firstName: string, lastName = "Smith") {
  const name = firstName + ' ' + lastName;
  alert(name);
}

sayName('Bob');

原文由 encrest 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏