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');
在coffeescript中,你可以访问条件存在运算符,所以可以这样做:
param.lastName ?= 'smith'
它编译为javascript:
if (param.lastName == null) {
param.lastName = 'smith';
}
8条答案
按热度按时间8ljdwjyq1#
事实上,现在似乎有一个简单的方法。下面的代码在TypeScript 1.5中工作:
诀窍是首先把你想从参数对象中选择的键放在括号中,用
key=value
表示任何默认值。接下来是:
和类型声明。这与您尝试做的有点不同,因为您没有完整的
params
对象,而是有解引用的变量。如果你想让传递任何东西给函数成为可选的,为类型中的所有键添加一个
?
,并在类型声明之后添加一个默认值={}
:ej83mcc02#
Typescript现在支持默认参数:
https://www.typescriptlang.org/docs/handbook/functions.html
此外,添加默认值允许您省略类型声明,因为它可以从默认值推断出来:
sqxo8psd3#
Object destructuring参数对象是上面许多答案的目标,Typescript现在有了适当的方法,使其更容易阅读和直观理解。
**解构基础:**通过解构对象,可以通过键名选择对象的属性。您可以定义任意数量的属性,默认值由基本语法
let {key = default} = object
设置。为参数对象编写接口、类型或类可以提高易读性。
4dbbbstv4#
不,TypeScript没有一种自然的方式来设置对象属性的默认值,比如一个对象有默认值而另一个没有。您可以定义更丰富的结构:
并使用它代替内联类型定义。
不幸的是,你不能这样做:
因为它只会在
name
是undefined
时设置默认值。rdlzhqv95#
这可能是一种不涉及长构造函数的好方法
vs91vp4v6#
这里有一些尝试,使用接口和解构与默认值。请注意,“lastName”是可选的。
sr4lhrrt7#
不需要解构,你可以创建一个defaults参数并将其传入
ut6juiuv8#
还有另一种不需要解构的方法,可以像这样使用类型设置默认值:
一个例子可能是