gpt4 book ai didi

typescript - TypeScript 中的递归泛型

转载 作者:行者123 更新时间:2023-12-03 23:39:14 27 4
gpt4 key购买 nike

我想声明一个简单的类型来替换一段代码中的any。我知道这将是一些对象式的论点,所以我可以使用 Record<string, unknown> ,但我宁愿更具体一点。
这将是理想的:

type MyObject = Record<string, string | string[] | number | boolean | MyObject>
但它给出了错误

Type alias 'MyObject' circularly references itself.ts(2456)


我可以通过使用接口(interface)作弊来解决这个问题:
type MyObject<T> = Record<string, string | string[] | number | boolean | T>

// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface IMyObject extends MyObject<IMyObject>{}
有没有办法做我想做的事,还是我应该坚持 Record<string, unknown>

最佳答案

编译器在意识到您指定的类型是以受支持的方式递归之前就放弃了,因为它不探测 the Record utility type 的定义。在检查圆度之前。这是 TypeScript 的设计限制。见 microsoft/TypeScript#41164解释一下。
这里的修复是替换 Record<string, XYZ>最终变成一个带有字符串 index signature 的类型喜欢 { [k: string]: XYZ } :

type MyObject = 
{ [k: string]: string | string[] | number | boolean | MyObject } // okay
可以正常工作。
Playground link to code

关于typescript - TypeScript 中的递归泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67006206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com