"You’re saying that any object given this contract must be an object containing 2 properties (no more, no less)"
The parenthetical 'no more, no less' should be removed here as it is misleading. TypeScript interfaces do allow the objects that 'implement' them to of course have other properties defined. See the LabelledValue example in the TypeScript docs:
https://www.typescriptlang.org/docs/handbook/interfaces.html