您可以将默认值传递给类构造函数吗?在此,last
会返回undefined
。
class greatFunction {
options: {
names: {first: 'Joe', last: 'Bloggs'}
}
constructor(options) {
console.log(options.names.first + ' ' + options.names.last);
}
}
调用:
new greatFunction({
names: {
first: 'Paul'
}
});
答案 0 :(得分:3)
而不是这样做,为什么不创建这样的界面
interface names {
firstname:string;
lastname ?: string;
}
因为您无法创建参数的属性可选。
或者你做的就像这样
interface IOptions{
names:INames;
}
interface INames {
first:string;
last?:string;
}
class greatFunction{
constructor (options:IOptions){
options.names.last = options.names.last?options.names.last:'Default';
console.log(options.names.first + ' ' + options.names.last)
}
}
new greatFunction({names:{first:'Theophilus'}});
它应该在控制台中返回默认值
答案 1 :(得分:0)
尝试设置默认值:
class GreatFunction {
options: {
names: {first: 'Joe', last: 'Bloggs'}
}
constructor({names: {first=this.options.names.first: firstName, last=this.options.names.last: lastName}}) {
console.log(`${firstName} ${lastName}`)
}
}
或者,使用库,例如lodash.defaults()似乎适合您的用例。
答案 2 :(得分:0)
您需要将某些内容传递给该函数,因此一个选项是尝试这样的事情:
class greatFunction {
defaultOptions = {
names: { first: 'Joe', last: 'Bloggs' }
}
constructor(options) {
if (options == null)
options = this.defaultOptions;
console.log(options.names.first + ' ' + options.names.last);
}
}
然后,您可以使用
创建新的greatFunction
let x = new greatFunction(null)
或者:
let y = new greatFunction({ names: { first: 'Test', last: 'Blah' } });
或者,不要使用构造函数,并在初始化后使用属性。例如:
class greatFunction {
public options = {
names: { first: 'Joe', last: 'Bloggs' }
}
constructor() { }
doSomething() {
console.log(this.options.names.first + ' ' + this.options.names.last);
}
}
然后使用:
let x = new greatFunction();
x.options = { names: { first: 'Test', last: 'Blah' } };
x.doSomething();