Tengo una matriz con tipos mime aceptables:
export const frontend = { ... zipMimeTypes: [ "application/zip", "application/x-zip-compressed", "multipart/x-zip", ], } as const;
Quiero incluirlo en otro archivo y usarlo así:
frontend.zipMimeTypes.includes(file.type)
Sin embargo, mi compilador TS se queja de file.type
El argumento de tipo 'cadena' no se puede asignar al parámetro de tipo '"aplicación/zip" | "aplicación/x-zip-comprimido" | "multiparte/x-zip"'.
Yo solo hago:
[ "application/zip", "application/x-zip-compressed", "multipart/x-zip", ].includes(file.type)
Funciona
El problema está en as const
. En su lugar, puede definir una interface
para usar con frontend
:
interface Frontend { zipMimeTypes: string[]; } const frontend: Frontend = { zipMimeTypes: [ "application/zip", "application/x-zip-compressed", "multipart/x-zip" ] };
Aunque obligar a zipMimeTypes a ser una matriz de cadenas eliminará el error, ahora ha perdido la escritura de zipMimeTypes.
En su lugar, crearía un tipo para sus zipMimeTypes.
La ventaja es que la finalización de código también funciona bien.
export const frontend = { zipMimeTypes: [ "application/zip", "application/x-zip-compressed", "multipart/x-zip", ], } as const; type zipMimeType = typeof frontend.zipMimeTypes[number]; interface File { type: zipMimeType; } const file:File = { type: 'application/zip' } if (frontend.zipMimeTypes.includes(file.type)) { //etc. }