我正在创建具有类型的构建器,我声明类型的方式是:
export type BuilderInterface<T> = {
[key in keyof T]: (arg: T[key]) => BuilderInterface<T> } & {
build(): T
}
运行ESLint时,它抱怨说:"BuilderInteface" was used before it was defined (no-use-before-define)
。这是正常的,因为我需要断言每个参数函数都返回相同类型的生成器。
在不违反eslint规则的情况下,我必须以哪种方式进行声明? 我应该直接忽略该规则吗?为什么?
答案 0 :(得分:1)
这是因为与接口不同的类型不是自引用的。您应该分解类型以避免自我引用,或者使用接口。
P.S。上面是理论上的...但是由于某种原因,您的类型对我有用(没有tslint,只有ts)。我想新版本的TS可以很好地解决这个问题。 检查以下内容:https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
P.P.S。我只是注意到您在谈论JSLint,而不是TSLint。当然,JSLint并不是检查TS代码的好工具。尝试尝试TSLint。
答案 1 :(得分:1)
ESLint是(某种)正确的,因为从技术上讲,您尚未声明类型并且正在使用它。递归类型很难处理。尝试使用TSLint来查看效果,因为它对TypeScript的理解更好,因此效果更好。
TypeScript团队非常擅长递归类型,因此它是有效类型。
禁用规则或创建例外,以便工具使您继续工作!