This is how my pipeline plugins define requirements. Record<PropertyKey, never> makes them incompatible with each other because it specifically denies any extra keys. Record<PropertyKey, unknown> allows me to work with pages whose content and metadata is unknown, which is good for reading but horribly unsafe for writing because it allows me to write anything in pages. Only {} behaves correctly because it keeps any pages outside of the requirements inaccessible.
Funny enough, this was more or less a happy accident.
.page.tsx files need a generator function as default export to create pages dynamically, and any named export becomes part of each page's data. Then I developed a generic template plugin which expects a Template object at page.data.template, thinking that any specialized template plugin can assign them as needed.
Well, if I export a Template in the .page.tsx file like here, it is automatically applied to all these pages.