¿Tiene una explicación de por qué TS no infiere el tipo de string en el primer ejemplo? ¿A pesar de que usé una cadena como valor predeterminado para la T genérica en la función de bar ? Gracias 🙏
El error (en el ejemplo 1):
Argumento de tipo 'cadena | número' no se puede asignar al parámetro de tipo 'cadena | indefinido'. El tipo 'número' no se puede asignar al tipo 'cadena | indefinido'.ts(2345)
// Example 1 (has error) const baz = (a: unknown) => a; const bar = <T extends string | number = string>(): T => { return baz('some_value') as T; }; const foo = (str?: string) => `${str} is string`; // Error!! foo(bar());Tengo dos opciones para una solución, pero no estoy seguro de por qué funcionan:
bar() a constante (ejemplo 2)str (ejemplo 3) // Example 2 (no error) const baz = (a: unknown) => a; const bar = <T extends string | number = string>(): T => { return baz('some_value') as T; }; const foo = (str?: string) => `${str} is string`; const barResult = bar(); foo(barResult); Quitar el ? :
// Example 3 (no error) const baz = (a: unknown) => a; const bar = <T extends string | number = string>(): T => { return baz('some_value') as T; }; const foo = (str: string) => `${str} is string`; foo(bar());