ReplaceTypeOfKey: {
    [P in keyof T]: K extends (keyof any)[]
        ? P extends number
            ? `${P}` extends `${VerifyConstraint<K[number], string | number>}`
                ? U
                : T[P] extends object
                    ? T[P] extends (...args: any[]) => any
                        ? T[P]
                        : ReplaceTypeOfKey<T[P], K, U>
                    : T[P]
            : P extends (K[number] extends number ? `${K[number]}` : K[number])
                ? U
                : T[P] extends object
                    ? T[P] extends (...args: any[]) => any
                        ? T[P]
                        : ReplaceTypeOfKey<T[P], K, U>
                    : T[P]
        : P extends number
            ? `${P}` extends `${VerifyConstraint<K, string | number>}`
                ? U
                : T[P] extends object
                    ? T[P] extends (...args: any[]) => any
                        ? T[P]
                        : ReplaceTypeOfKey<T[P], K, U>
                    : T[P]
            : P extends (K extends number ? `${K}` : K)
                ? U
                : T[P] extends object
                    ? T[P] extends (...args: any[]) => any
                        ? T[P]
                        : ReplaceTypeOfKey<T[P], K, U>
                    : T[P]
}

Type Parameters

  • T
  • K extends (keyof any)[] | keyof any
  • U