Javascript ESLint抱怨TypeScript类型声明在声明之前使用了类型

Javascript ESLint抱怨TypeScript类型声明在声明之前使用了类型,javascript,typescript,eslint,Javascript,Typescript,Eslint,我正在创建一个具有类型的生成器,我声明类型的方式是: export type BuilderInterface<T> = { [key in keyof T]: (arg: T[key]) => BuilderInterface<T> } & { build(): T } 导出类型BuilderInterface={ [key-in-keyof-T]:(arg:T[key])=>BuilderInterface}&{ build():T } 当运

我正在创建一个具有类型的生成器,我声明类型的方式是:

export type BuilderInterface<T> = {
  [key in keyof T]: (arg: T[key]) => BuilderInterface<T> } & {
  build(): T
}
导出类型BuilderInterface={
[key-in-keyof-T]:(arg:T[key])=>BuilderInterface}&{
build():T
}
当运行ESLint时,它抱怨说:
“BuilderInteface”在定义之前就被使用过(在定义之前没有使用)
。这很正常,因为我需要断言每个参数函数都返回一个相同类型的生成器

在不违反eslint规则的情况下,我必须以何种方式声明此内容?
我应该直接忽略规则吗?为什么?

这是因为与接口不同的类型是不可自引用的。您应该分解类型以避免自引用,或者使用接口

另外,以上是理论上的。。。但出于某种原因,你的类型适合我(没有tslint,只有ts)。我想新版本的TS可以很好地处理这个问题。 选中此项:

p.p.S.我刚注意到你说的是JSLint,不是TSLint。当然,JSLint不是检查TS代码的好工具。请尝试一下TSLint。

ESLint(某种程度上)是正确的,因为从技术上讲,您尚未声明类型,并且正在使用它。递归类型很难处理。尝试使用TSLint,看看它是否能更好地理解TypeScript,从而获得更好的结果

TypeScript团队非常擅长递归类型,因此它是一种有效的类型


禁用规则或创建异常,以便这些工具让您可以继续工作

对不起,我回来晚了。。。谢谢你的回答,我明白ts是有效的,因为我只有eslint问题。