/// interface AmeDictionary { [mapKey: string]: T; } // noinspection JSUnusedGlobalSymbols type KeysMatchingType = { [K in keyof T]: T[K] extends V ? K : never }[keyof T]; type AmeCssBorderStyle = 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | 'groove' | 'ridge' | 'outset'; interface AmeCssBorderSettings { style: AmeCssBorderStyle; color: string; width: number; } type AmeObservablePropertiesOf = { [P in keyof T]: KnockoutObservable; } type AmeRecursiveObservablePropertiesOf = { [P in keyof T]: T[P] extends object ? AmeRecursiveObservablePropertiesOf : KnockoutObservable; }