Dado el siguiente código de ejemplo
interface MyInterface { foo: string; } function doSomethingWith(x: Record<string, unknown>) { /* ... */ } const myInterface: MyInterface = { foo: 'bar' }; doSomethingWith(myInterface);
No es posible pasar la variable a la función porque
El argumento de tipo 'MyInterface' no se puede asignar al parámetro de tipo 'Record<string, unknown>'. Falta la firma de índice para el tipo 'string' en el tipo 'MyInterface'.(2345)
Resolví el problema convirtiendo la variable
const myInterfaceAsRecord = (myInterface as unknown) as Record<string, unknown>;
y me gustaría saber si hay formas "mejores" de pasar la interfaz a la función.
Simplemente use el type
en lugar de la interface
type MyInterface = { foo: string; } function doSomethingWith(x: Record<string, unknown>) { /* ... */ } const myInterface: MyInterface = { foo: 'bar' }; doSomethingWith(myInterface);
Ver esta respuesta para más contexto
Una opción sería extender la interfaz desde el registro:
interface MyInterface extends Record<string, unknown> { foo: string; } function doSomethingWith(x: Record<string, unknown>) { /* ... */ } const myInterface: MyInterface = { foo: 'bar' }; doSomethingWith(myInterface);