Permítanme decirlo simplemente como,
interface PlanValue { planName: string; startDate: string; } type DeviceKey = 'pc' | 'mobile' | 'laptop'; type PlanType = Record<DeviceKey, PlanValue> interface Subscription { valid: boolean; plan: PlanType; } Digamos que se agrega una nueva clave de dispositivo llamada Kiosk al tipo DeviceKey .
Pero el tipo de retorno de esta clave debe ser booleano.
Por ejemplo
const subsc1: Subscription = new Subscription(); const subsc2: Subscription = new Subscription(); console.log(subsc1.plan.pc) // type should be PlanValue console.log(subsc2.plan.Kiosk) // type should be boolean No puedo cambiar el tipo Subscription.plan a PlanType | boolean porque romperá otros códigos que se refieren a este tipo.
¿Cómo puedo obtener un tipo de devolución diferente según la clave de acceso durante el tiempo de ejecución?
Usa una intersección :
interface PlanValue { planName: string; startDate: string; } type DeviceKey = 'pc' | 'mobile' | 'laptop'; type PlanType = Record<DeviceKey, PlanValue> & { Kiosk: boolean }; interface Subscription { valid: boolean; plan: PlanType; } declare const s: Subscription; s.plan.pc // PlanValue s.plan.Kiosk // boolean