Omit
enum AnimalsOut {
WOLF = 'wolf',
BADGER = 'badger',
CAT = 'cat',
}
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>> //probably in a lib already
type DeprecateEnumObject<T, K extends keyof T> = Omit<T, K>
type DeprecateEnumValues<T, K extends keyof T> = DeprecateEnumObject<T, K>[Exclude<keyof T, K>]
type AnimalsIn = DeprecateEnumValues<typeof AnimalsOut, 'CAT'>
const AnimalsIn: DeprecateEnumObject<typeof AnimalsOut, 'CAT'> = AnimalsOut;
let a: AnimalsIn = AnimalsIn.BADGER;
let ai: AnimalsOut.BADGER = AnimalsIn.BADGER;
let ao: AnimalsIn.BADGER = AnimalsIn.BADGER;// error
let ao2: typeof AnimalsIn['BADGER'] = AnimalsIn.BADGER;// more convoluted