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)}这很好,但是如果所有选项都是可选的,并且如果没有传递该选项,会使用该选项的默认值。我不希望它是“全部传递选项”或“不传递选项”。这很好,但是如果所有选项都是可选的,并且如果该选项未传递,则将使用该选项的默认值。我不希望它要么通过所有选项,要么不通过任何选项。