Javascript TypeScript-将对象文本传递给类构造函数

Javascript TypeScript-将对象文本传递给类构造函数,javascript,typescript,Javascript,Typescript,可以将默认值传递给类构造函数吗?在这里,last返回undefined class greatFunction { options: { names: {first: 'Joe', last: 'Bloggs'} } constructor(options) { console.log(options.names.first + ' ' + options.names.last); } } 称为: new gre

可以将默认值传递给类构造函数吗?在这里,
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'
    }
});

尝试设置默认值:

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}`)        
  }
}

或者,使用一个库,例如,它似乎适合您的用例。

尝试设置默认值:

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}`)        
  }
}

或者,使用一个库,例如,它似乎适合您的用例。

您确实需要向函数传递某些内容,因此一个选项是尝试如下操作:

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)
或:

或者,不要使用构造函数,在初始化后使用属性。例如:

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();

您确实需要向函数传递某些内容,因此一个选项是尝试以下内容:

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)
或:

或者,不要使用构造函数,在初始化后使用属性。例如:

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();

与其这样做,为什么不创建一个这样的接口呢

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'}});
由于无法创建,请将参数的属性设置为可选

或者你用这种艰难的方式

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'}});

它应该在控制台中返回默认值,而不是这样做。为什么不创建这样的界面呢

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'}});
由于无法创建,请将参数的属性设置为可选

或者你用这种艰难的方式

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'}});

它应该在控制台中返回默认值

我不熟悉typescript,但是,在构造函数中,您可以使用
options.names.last=options.name.last | | |“default”设置默认值
如果检查的第一面(从
| | |
开始的左边)为true,则取该值,如果为false,则取右边。因为undefined是false,所以它默认为
“default”
@Dellirium是的,我知道,但正在寻找更整洁的方法。谢谢您不希望参数名与本地变量相同我不熟悉typescript,但在构造函数中,您可以使用
options.names.last=options.name.last | | |“default”
设置默认值,如果检查的第一面(从
| |
开始)为true,则取该值,如果为false,右边是。因为undefined是false,所以它默认为
“default”
@Dellirium是的,我知道,但正在寻找更整洁的方法。谢谢您不希望您的参数名与局部变量相同“该语言仅支持为函数参数本身设置默认值”这指的是typescript或javascript(对于javascript,如何?o.0)两者,真的
constructor({first=this.options.first,last=this.options.last}){console.log(first+''+last)}
“该语言只支持为函数参数本身设置默认值”这指的是typescript或javascript(对于javascript,how?o.0)两者,真的<代码>构造函数({first=this.options.first,last=this.options.last}){console.log(first+''+last)}这很好,但是如果所有选项都是可选的,并且如果没有传递该选项,会使用该选项的默认值。我不希望它是“全部传递选项”或“不传递选项”。这很好,但是如果所有选项都是可选的,并且如果该选项未传递,则将使用该选项的默认值。我不希望它要么通过所有选项,要么不通过任何选项。