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';
}
实际上,现在似乎有一种简单的方法。以下代码适用于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();
对参数对象进行对象解构是上面许多答案的目标,Typescript现在有了适当的方法,使其更容易阅读和直观地理解。
析构基础:通过析构对象,您可以通过键名从对象中选择属性。您可以定义任意数量的属性,默认值由基本语法let {key = default} = object设置。
let {firstName, lastName = 'Smith'} = myParamsObject;
//Compiles to:
var firstName = myParamsObject.firstName,
_a = myParamsObject.lastName,
lastName = _a === void 0 ? 'Smith' : _a;
为参数对象编写接口、类型或类可以提高易读性。
类型FullName = {
firstName:字符串;
/** @defaultValue 'Smith' */
姓呢?:字符串;
}
函数sayName(参数:FullName) {
//设置参数对象的默认值
var {firstName, lastName = 'Smith'} = params;
//做事情
var name = firstName + " " + lastName;
警报(名称);
}
//使用它
sayName ({
名字:“鲍勃”
});