type TopicSettingsRead = { LastModified: string; UserActionTimeStamp: string; }; type TopicSettingsReadWrite = { Channel: Channel; Topic: Topic; Status: 'OptIn' | 'OptOut'; }; type TopicModifyMode = 'read' | 'write'; type TopicSettings = TMode extends 'read' ? TopicSettingsRead & TopicSettingsReadWrite : TMode extends 'write' ? TopicSettingsReadWrite : never; type Communications = { [k in CommunicationId]: TopicSettings; }; export type { Communications, TopicModifyMode, TopicSettingsRead, TopicSettingsReadWrite };