如果 value1 不是有效的 属性,'return object[value1][value2] || default' 将失败
'return object[value1][value2] || default' fails if value1 is not a valid property
我有一个对象字面量,其方法是 return 给定特定输入的子 属性,或者如果查找失败,则 return 默认 属性。
//private class, no export
class TemplateSelection {
'bills';
'legislators';
}
export class ComponentTemplates {
private readonly 'notFound';
private readonly 'data': {
'us': TemplateSelection,
'ny': TemplateSelection,
}
constructor(){
this.notFound = PageNotFoundComponent;
this.data = {
us: { bills: BillDataComponent, legislators: UsComponent },
ny: { bills: BillDataComponent, legislators: NyComponent },
}
}
public getData = (requested: RouteParameters) => {
// TODO: lookup fails if !requested.region, but not if !requested.resourceType?
return this.data[requested.region][requested.resourceType] || this.notFound;
}
}
- 如果
[requested.region] == 'us'
& [requested.resourceType] == 'bills'
,我得到 BillDataComponent
组件,正如预期的那样。
- 如果
[requested.region] == 'ny'
和 [requested.resourceType] == 'monkeys'
,我会按预期获得 PageNotFoundComponent。
- 如果
[requested.region] == 'monkeys'
和 [requested.resourceType] == 'legislators'
,我在我的项目中得到 TypeError: Cannot read property 'legislators' of undefined
。
||
比较似乎只查看最后一个查找键而不是两者,但括号、大括号或圆括号的任何组合似乎都没有将该比较扩展到整个 this.data[requested.region][requested.resourceType]
.
我错过了什么?
对于那里的任何其他新手,如@Nit , JavaScript doesn't currently support so-called "Optional Chaining";(遗憾的是非常难看)"solution" 是在第一个 if/else
检查中回避问题参数,像这样:
public getData = (requested: RouteParameters) => {
if (this.regions.includes(requested.region))
return this.components[requested.region][requested.resourceType] || this.notFound;
else return this.notFound;
}
我有一个对象字面量,其方法是 return 给定特定输入的子 属性,或者如果查找失败,则 return 默认 属性。
//private class, no export
class TemplateSelection {
'bills';
'legislators';
}
export class ComponentTemplates {
private readonly 'notFound';
private readonly 'data': {
'us': TemplateSelection,
'ny': TemplateSelection,
}
constructor(){
this.notFound = PageNotFoundComponent;
this.data = {
us: { bills: BillDataComponent, legislators: UsComponent },
ny: { bills: BillDataComponent, legislators: NyComponent },
}
}
public getData = (requested: RouteParameters) => {
// TODO: lookup fails if !requested.region, but not if !requested.resourceType?
return this.data[requested.region][requested.resourceType] || this.notFound;
}
}
- 如果
[requested.region] == 'us'
&[requested.resourceType] == 'bills'
,我得到BillDataComponent
组件,正如预期的那样。 - 如果
[requested.region] == 'ny'
和[requested.resourceType] == 'monkeys'
,我会按预期获得 PageNotFoundComponent。 - 如果
[requested.region] == 'monkeys'
和[requested.resourceType] == 'legislators'
,我在我的项目中得到TypeError: Cannot read property 'legislators' of undefined
。
||
比较似乎只查看最后一个查找键而不是两者,但括号、大括号或圆括号的任何组合似乎都没有将该比较扩展到整个 this.data[requested.region][requested.resourceType]
.
我错过了什么?
对于那里的任何其他新手,如@Nit if/else
检查中回避问题参数,像这样:
public getData = (requested: RouteParameters) => {
if (this.regions.includes(requested.region))
return this.components[requested.region][requested.resourceType] || this.notFound;
else return this.notFound;
}