如何创建递归类型?
Posted
技术标签:
【中文标题】如何创建递归类型?【英文标题】:How to create recursive type? 【发布时间】:2022-01-21 02:34:33 【问题描述】:我有一些元素,其子元素的结构与其父元素相同。当我使用 TypeScript 创建它们的类型时,我遇到了一些错误。我该如何解决这个问题?
type RowRecord = Record<string, CellData>;
type CellData = string | number | RowRecord;
错误:
类型别名“CellData”循环引用自身。 类型别名“RowRecord”循环引用自身。示例记录:
"id": "60f49dbb3ee1a9241749abb6",
"gender": "female",
"firstName": "Millicent",
"lastName": "Harrington",
"birthDate": "2013-05-14T04:35:49.400Z",
"age": 8,
"email": "millicent@harrington.com",
"address":
"country": "USA",
"state": "Utah",
"city": "Cecilia",
"street": "Newkirk Placez",
"houseNumber": 969
【问题讨论】:
【参考方案1】:您可以将Record
扩展为它所代表的对象
type RowRecord = [K in string]: CellData ; // or [k: string]: CellData
type CellData = string | number | RowRecord;
TypeScript 不允许您的定义,因为 Record<string, CellData>
被急切地评估。如果你给 TS 一个对象类型,那么 TypeScript 会认识到它可以推迟对该类型的评估,从而允许递归定义。
【讨论】:
我已经尝试过您的解决方案并且它有效。但我不知道这样的“ [k: string]: CellData ”数据结构。你能告诉我这是什么或推荐我任何关于它的来源吗?[k: string]
有一个index signature,[k in string]
是一个mapped type以上是关于如何创建递归类型?的主要内容,如果未能解决你的问题,请参考以下文章