我有一个名为表达式的接口,它通过一个返回到自己,就像一个无限嵌套的结构。
我传入一个已经有泛型的泛型,我想推断它。
我有以下接口:
type Expression<T, U = string> = (T extends Approval<U> ? Approval<U> : Condition<U>) | OperatorExpression<T, U>
interface OperatorExpression<U, T = string> {
operands: Expression<T, U>[]
// other stuff
}
interface Approval<T = string> {
approver: T
// other stuff
}
interface Condition<T = string> {
id: T
// other stuff
}然后,当我将表达式与具有非字符串泛型的泛型一起使用时,我必须这样称呼它:
Expression<Approval<Types.ObjectId>, Types.ObjectId>我想这样称呼它:Expression<Approval<Types.ObjectId>>,基本上是根据第一个泛型的泛型推断出第二个泛型。
在我小小的ts知识中,我想要做这样的事情,但它抱怨是因为"S“不存在:
type Expression<T extends (Approval<S> | Condition<S>), U = S> = (T extends Approval<U> ? Approval<U> : Condition<U>) | OperatorExpression<T, U>我怎么能这么做?谢谢
编辑
既然这个问题现在已经解决了,谢谢@Meowster,我将在这里把他的解决方案集成到我的用例中
type InferType<T> = T extends Approval<infer E> | WorkflowCondition<infer E> ? E : never;
type R<T> = InferType<T>
export type Expression<T, U = R<T>> =
| (T extends Approval<U> ? Approval<U> : T extends WorkflowCondition<U> ? WorkflowCondition<U> : WorkflowApproval<U>)
| OperatorExpression<T, U>发布于 2022-07-22 09:01:52
type Expression<T extends Approval | Condition> = T | OperatorExpression<T>
interface OperatorExpression<T extends Approval | Condition> {
operands: Expression<T>[]
// other stuff
}
interface Approval<U = any> {
approver: U
// other stuff
}
interface Condition<U = any> {
id: U
// other stuff
}
type E = OperatorExpression<Approval<number>>
type O = E['operands'] // Expression<Approval<number>>[]或者使用推断语法
type InferType<T> = T extends Approval<infer E> | Condition<infer E> ? E : never;
interface Approval<T = string> {
approver: T
// other stuff
}
interface Condition<T = string> {
id: T
// other stuff
}
type R = InferType<Approval<number>> // R = numberhttps://stackoverflow.com/questions/73076974
复制相似问题