我想声明一个简单类型来替换any
在一段代码中。我知道这将是一些类似对象的论证,所以我可以使用Record<string, unknown>
,但我宁愿成为一个little更具体。
这将是理想的:
type MyObject = Record<string, string | string[] | number | boolean | MyObject>
但它给出了错误
类型别名“MyObject”循环引用自身.ts(2456)
我可以通过使用接口作弊来解决这个问题:
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实用型在检查圆度之前。这是 TypeScript 的设计限制。看微软/TypeScript#41164以获得解释。
这里的修复方法是替换Record<string, XYZ>
最终变成了带有字符串的类型索引签名 like { [k: string]: XYZ }
:
type MyObject =
{ [k: string]: string | string[] | number | boolean | MyObject } // okay
其工作没有错误。
Playground 代码链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)