如何在 TypeScript 中通过索引访问通用对象的属性?
Posted
技术标签:
【中文标题】如何在 TypeScript 中通过索引访问通用对象的属性?【英文标题】:How do I access the properties of a generic object by index in TypeScript? 【发布时间】:2019-02-13 16:39:34 【问题描述】:我有以下函数,它遍历对象的所有属性并将它们从 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】:你可以像这样制作一个可索引的签名:
function findAndConvertDates<T extends [key: string]: any >(objectWithStringDates: T): T
【讨论】:
我试过这个export interface IGApiResponse<T extends [key:string] : any> extends GaxiosResponse<T> ; let tmpData: IGApiResponse<GoogleApiSchema>;
但是当试图获取 tmp 数据的属性之一时,我得到了脚本类型的错误:` const test = tmpData.data["test"]` 错误:@ 987654323@。如果我添加any
,没有错误,但类型不安全...` const test =( tmpData.data as any)["test"]`以上是关于如何在 TypeScript 中通过索引访问通用对象的属性?的主要内容,如果未能解决你的问题,请参考以下文章