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没有一种自然的方法来为对象的属性设置默认值,比如一个有默认值,另一个没有。你可以定义一个更丰富的结构:
class Name {
constructor(public first : string,
public last: string = "Smith") {
}
}
用它来代替内联类型定义。
function sayName(name: Name) {
alert(name.first + " " + name.last);
}
不幸的是,你不能这样做:
function sayName(name : { first: string; last?:string }
/* and then assign a default object matching the signature */
= { first: null, last: 'Smith' }) {
}
因为它只会在名称未定义时设置默认值。
不,TypeScript没有一种自然的方法来为对象的属性设置默认值,比如一个有默认值,另一个没有。你可以定义一个更丰富的结构:
class Name {
constructor(public first : string,
public last: string = "Smith") {
}
}
用它来代替内联类型定义。
function sayName(name: Name) {
alert(name.first + " " + name.last);
}
不幸的是,你不能这样做:
function sayName(name : { first: string; last?:string }
/* and then assign a default object matching the signature */
= { first: null, last: 'Smith' }) {
}
因为它只会在名称未定义时设置默认值。