Type Alias DisallowExtraPropsRecursive<Actual, Contract>
DisallowExtraPropsRecursive: Contract extends unknown[]
? Actual extends unknown[]
? DisallowExtraPropsRecursive<Actual[number], Contract[number]>[]
: Contract
: Contract extends object
? Actual extends Contract
? {
[K in keyof Contract]: K extends keyof Actual
? DisallowExtraPropsRecursive<Actual[K], Contract[K]>
: Contract[K]
} & { [K in Exclude<keyof Actual, keyof Contract>]: never }
: Contract
: Contract
? Actual extends unknown[]
? DisallowExtraPropsRecursive<Actual[number], Contract[number]>[]
: Contract
: Contract extends object
? Actual extends Contract
? {
[K in keyof Contract]: K extends keyof Actual
? DisallowExtraPropsRecursive<Actual[K], Contract[K]>
: Contract[K]
} & { [K in Exclude<keyof Actual, keyof Contract>]: never }
: Contract
: Contract
Type Parameters
- Actual extends Contract
- Contract
Given a type Contract and a type Actual that extends Contract, returns Contract with properties that are added in Actual with type never. If used in a function signature like this:
<Actual extends Contact>(param: Actual & DisallowExtraPropsRecursive<Actual, Contract>, this has the effect that extra properties in Actual will be disallowed compile-time.