type A2 = { label: 'name'; render: (v: string) => any; } | { label: 'age'; render: (v: number) => any; } | { label: ['name']; render: (v: string) => any; } | { label: ['age']; render: (v: number) => any; } const a1: A2 = { label: 'age', render: (v) => v, } const a2: A2 = { label: ['name'], render: (v) => v, }En a1, la 'v' de render se infiere como 'número' correctamente. Pero en a2, es 'cualquiera'. Quiero saber cuál es la diferencia y por qué. ¿Es un error para Typescript?
Simplemente publique esto como una respuesta sugerida por Samuli Hakoniemi en los comentarios para que sea más fácil para los futuros espectadores.
Necesita usar una unión dentro de la definición de matriz:
type A2 = { label: 'name' | 'age'; render: (v: string | number) => unknown; } | { label: ['name' | 'age']; render: (v: string | number) => unknown; } const a1: A2 = { label: 'age', render: (v) => v, } const a2: A2 = { label: ['name'], render: (v) => v, }