我在Typescript 中有这样的代码:
type DormNodePredicate = DormEdge | (() => DormNode<DormNodePredicateRecord>);
interface DormNodePredicateRecord {
[key: string]: DormNodePredicate;
}
export class DormNode<DNPR extends DormNodePredicateRecord> {
constructor(public preds: DNPR) {}
}
enum PredicateType {
STRING = "string"
}
export class DormEdge<AsArray extends boolean = false> {
constructor(private predType: PredicateType, asArray: AsArray = false as AsArray) {}
}
const Audit = new DormNode({
user: () => User
})
const User = new DormNode({
name: new DormEdge(PredicateType.STRING),
audits: () => Audit
});
我的问题是,Audit
和User
都被推断为any
类型.我需要能够从用户引用审核,这样我才能达到深度递归,如:Audit.preds.user().preds.audits()...
.当然,这只是一个例子,我在现实世界中的用例要复杂和深刻得多.我怎么才能解决这个问题呢?
作为附注,在代码的这一部分:
export class DormEdge<AsArray extends boolean = false> {...}
当我从泛型中go 掉= false
,我就能够做我想做的事情了.我不太明白在幕后到底发生了什么.如果有人能帮我解决这个问题,我将不胜感激.作为参考,我使用的是typescript@5.3.3
.谢谢!