如何通过TypeScript中的索引访问通用对象的属性?

时间:2018-09-08 17:10:58

标签: node.js typescript generics typescript-generics index-signature

我具有以下函数,该函数遍历对象的所有属性并将其从ISO字符串转换为日期:

function findAndConvertDates<T>(objectWithStringDates: T): T {

    for (let key in Object.keys(objectWithStringDates)) {

        if (ISO_REGEX.test(objectWithStringDates[key])) {
            objectWithStringDates[key] = new Date(objectWithStringDates[key]);

        } else if (typeof objectWithStringDates[key] === 'object') {
            objectWithStringDates[key] = findAndConvertDates(
                objectWithStringDates[key]
            );
        }
    }
    return objectWithStringDates;
}

TypeScript不断告诉我Element implicitly has an 'any' type because type '{}' has no index signature-指的是objectWithStringDates[key]的众多实例。

考虑到该对象作为通用对象传入,我该如何设置在没有显式索引签名的情况下访问这些属性?

(否则,如何提供索引签名或抑制此错误?)

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以像这样制作可索引的签名:

<ul id="menu-header" class="mainnav-section"> <li id="menu-item-511" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-511"> <a href="http://#">Latest</a> <ul class="sub-menu"> <li id="menu-item-512" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-512"> <a href="http://#">HardFork</a> </li> </ul> </li> <li id="menu-item-513" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-513"> <a href="http://#">Innovations</a> </li> </ul>