Intersected rather than Extracted on purpose: TypeScript loses object-literal freshness
through a naked type parameter, so spec: S with S extends SpecOf[K] accepts a misspelt
key silently. This shape keeps the excess-property check AND still infers T from type.
The spec of one type, as a function parameter.
Intersected rather than
Extracted on purpose: TypeScript loses object-literal freshness through a naked type parameter, sospec: SwithS extends SpecOf[K]accepts a misspelt key silently. This shape keeps the excess-property check AND still infersTfromtype.