The satisfies Operator & Const Assertions
Two common problems when writing typed object literals: annotate them and you lose their exact inferred shape, don't annotate them and the compiler won't check they match what you meant. satisfies and as const solve both.
The problem with a plain annotation
Annotating with Record<string, Setting> checks that every value is a valid Setting, but then widens every property to the whole union number | string, TypeScript forgets that retries specifically was a number.
satisfies keeps the precise type
satisfies checks the object against Record<string, Setting> the same way the annotation did, rejecting anything that doesn't fit, but it doesn't replace the object's own inferred type afterward. Each property keeps its own specific type.
const assertions
as const tells the compiler "infer the narrowest possible type," a literal tuple of exact strings, marked readonly, instead of the general string[]. Combined with typeof ...[number], it's a common way to derive a union type from an array of values you already have, one list instead of a list plus a hand-written union that can drift apart.
NOTE
satisfies and as const solve different problems and combine well: as const narrows a literal's own inferred type, satisfies checks that literal against some other type without widening it. Reach for satisfies whenever you're about to write : SomeType and would lose useful precision by doing so.