Вот как:
type Options = ({ settings?: Settings<true>; enforceAdvancedOrder?: boolean; } | { settings?: Settings<false | undefined>; enforceAdvancedOrder?: never; }); type Settings<B extends boolean | undefined = boolean> = B extends undefined ? { enableAdvancedFeature?: B; } : { enableAdvancedFeature: B; };
Вот несколько образцов для проверки:
const validOption1: Options = { settings: { enableAdvancedFeature: true }, enforceAdvancedOrder: true, }; const validOption2: Options = { settings: { enableAdvancedFeature: false }, enforceAdvancedOrder: undefined, // enforceAdvancedOrder should be undefined }; const validOption3: Options = { settings: {}, enforceAdvancedOrder: undefined, // enforceAdvancedOrder should be undefined }; const invalidOption: Options = { settings: { enableAdvancedFeature: false }, enforceAdvancedOrder: true, // This should cause a TypeScript error }; const invalidOption2: Options = { settings: {}, enforceAdvancedOrder: true, // This should cause a TypeScript error };