我有一组像这样的对象:
questionConfig = [{
section: 'base',
key: 'firstName',
label: 'First name',
type: 'text',
fieldType: 'input'
required: true,
},
{
section: 'dynamic'
key: 'emailAddress',
label: 'Email',
type: 'email',
fieldType: 'input',
required: true,
},
{
key: 'primaryPhone',
label: ' primary phone',
type: 'phone',
fieldType: 'input'
},
{
key: 'something',
label: 'dgfdsfgds',
options: [
{key: 1, value: 'dsfgdsg'},
{key: 2, value: 'dfgdsfg'},
{key: 3, value: 'dsfgdsgds'},
{key: 4, value: 'dsfgdgsf'}
],
fieldType: 'dropdown'
}]
如何过滤此数组以获取section ='base'的对象?
如果尝试
let questionBaseSection = this.questionConfig.filter(question => question.section === 'base' )
得到错误: 属性'section'在类型'{section:string; key:string; label:string;必需:布尔值; minLength:数字; minLengthErr ......“。 属性'section'在类型'{key:string; label:string; type:string; fieldType:string;必需:布尔值; minLength:麻木......'。
答案 0 :(得分:3)
错误消息显示“'{section:string; key:string; label:string; required:boolean; minLength: number; minLengthErr...
'”。这意味着questionConfig有一个具有属性minLength
和minLengthErr
的对象。
因此,似乎questionConfig
的对象多于您在代码段中显示的对象,其中一个对象缺少属性section
。
验证对象添加到questionConfig
的位置。
您可以修复对象,或者更好的方法是利用TypeScript的静态类型功能,并为questionConfig
中的项目定义数据类型。
答案 1 :(得分:1)
questionConfig: any[] = [{
section: 'base',
key: 'firstName',
label: 'First name',
type: 'text',
fieldType: 'input'
required: true,
}, {
bla: 'bla',
...
}, {
bla: 'bla',
test: 'bla',
...
}];
由于您的数组似乎可以将多个不同类型的对象推送到它,因此在声明时必须将其强制转换为any[]
。你得到了这个错误,因为当你在typescript中声明那个数组时,它会隐式地决定它只能在其声明的类型中包含对象。如果将其转换为any[]
,则不应再显示该错误Property 'blabla' does not exist on type '{ ... }'
,因为数组中的对象现在为any
类型。
答案 2 :(得分:1)
@Pradeep Kumar已经解释了上面的问题,但我想补充一点,你可能有兴趣阅读 Type-guards and differentiating types