Por qué es esto:
const test: {} = "test" // shouldn't this raise "Type 'string' is not assignable to type '{}'." error? console.log(test) ¿Un código mecanografiado válido?
Hace solo un momento, este fragmento de código hizo que enviara llamadas API incorrectas, porque tenía algo como esto:
const getAPIData = async (id: string, filters: NetworkFilters | {} = {}) Lo que quería lograr es que los filters tuvieran un valor predeterminado de objeto sin propiedades, pero por mi error pasé una cadena allí y esto rompió mis llamadas a la API. ¿Por qué es posible? Debería generar un error.
Lamentablemente, este es uno de los casos extremos en TS en el que probablemente sea una buena idea explicar qué significa realmente assignable .
{} es un objeto sin propiedades, pero como tal, se le puede asignar cualquier objeto y la string no es una excepción. (la string también tiene métodos fe toLowerCase ).
Si, por ejemplo, declaraste const test: { toLowerCase: () => string } = "test" , tampoco obtendrás un error, porque toLowerCase es un método de string .
Si dijo const test: { notAStringMethod: () => string } = "test" , entonces esto falla, porque notAStringMethod no es un método de string y, por lo tanto, no se puede asignar.