Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将通用对象字段获取为数组_Javascript_Typescript_Typescript Generics - Fatal编程技术网

Javascript 将通用对象字段获取为数组

Javascript 将通用对象字段获取为数组,javascript,typescript,typescript-generics,Javascript,Typescript,Typescript Generics,我有一个对象,我想在GenericComponent中使用它的数组属性servicelements 对象 interface MyObject { id: number; serviceElements: ServiceElement[]; } interface ServiceElement { id: number; } 通用组件 interface Props<Type> { service: GenericService<Type&g

我有一个对象,我想在
GenericComponent
中使用它的数组属性
servicelements

对象

interface MyObject {
    id: number;
    serviceElements: ServiceElement[];
}

interface ServiceElement {
    id: number;
}
通用组件

interface Props<Type> {
    service: GenericService<Type>;
}

export default class GenericComponent<Type> extends React.Component<Props, {}> {
    ....

    private fillDataTable = (): void => {

        service.list().then((data: Type[]) => {

            data.forEach(record => {

                // 1st attempt
                const array: ServiceElement[] = record['serviceElements'];

                // record['serviceElements'] gives the error:
                /* TS7053: Element implicitly has an 'any' type because expression of type '"serviceElements"' can't be used to index type 'unknown'.
                    Property 'serviceElements' does not exist on type 'unknown'.
                */

                //////////////

                // 2th attempt
                const array: ServiceElement[] = record['serviceElements' as keyof Type];

                // const array gives the error:
                /* TS2322: Type 'Type[keyof Type]' is not assignable to type 'ServiceElement[]'.
                     Type 'Type[string] | Type[number] | Type[symbol]' is not assignable to type 'ServiceElement[]'.
                       Type 'Type[string]' is not assignable to type 'ServiceElement[]'.
                */
            }

        }

    }

    ....

}
那么,我如何才能进入
GenericComponent
记录
的字段
servicelements
作为数组在其上循环


我已经添加了您可能需要的
.map()


仅基于上述信息,我们可能无法帮助您,我们需要更多详细信息。但是您可能需要
const array=record.servicelements。不需要括号表示法,TypeScript将根据
record.serviceElements
@T.J.Crowder的类型推断
数组的类型。我刚刚编辑了这个问题。对不起,我只是不想通过发送所有不必要的代码来让事情变得更复杂。我想这就足够了。
类型的定义是什么?您的代码期望
类型
具有字符串索引访问权限和/或
servicelements
属性。如果just
record.servicelements
不起作用,那么
Type
就没有该类型。我注意到您正在做很多显式键入的事情,例如
then
处理程序上的
数据
参数,承诺
service.list()
返回。如果
service.list
是属性定义的,则不需要这样做,这样做会使维护更加困难。@t.J.Crowder
类型的防御在本例中是
MyObject
,因为我称它为
。我非常确定
MyObject
具有您上面看到的
servicelements
。我认为typescript编译器不允许任何类型的
。我还将
service.list().then((数据:Type[])
更改为
service.list().then(数据
,事实上,这并不需要;)
m.serviceElements
给出错误:
TS2339:类型“Type”上不存在属性“serviceElements”。
<GenericComponent<MyObject> service={new MyObjectService()}/>
data.map(m => m.serviceElements)
    .forEach(se => {
        // TODO: THINGS
    });