typescript - Namespace no marcado como solo declaración de tipo
Tengo un archivo de Typescript que se ve así:
export namespace MyNamespace {
export const myFunc = (a:number) => 3;
}
Y cuando lo compilo (en mi caso estoy usando Storybook), obtengo este error:
Namespace not marked type-only declare. Non-declarative namespaces are only supported experimentally in Babel
. To enable and review caveats see: https://babeljs.io/docs/en/babel-plugin-transform-typescript
Esto es un babel tratando de compilar un error de TS hasta donde puedo decir.
Este error "Namespace not marked type-only declare" es desconcertante porque no parece ser inglés correcto. ¿Se supone que debería haber una coma allí?
¿Se supone que debo declarar algo? ¿Qué es un espacio de nombres solo de tipo?
Respuesta #1
declare es una palabra clave en Typescript, y "solo-tipo" se refiere a su comportamiento. Cuando agregas la palabra clave declare a un namespace, solo puede contener tipos. Por lo tanto, el error indica que Babel no soporta namespace (por defecto, cuando se hizo la pregunta) a menos que uses esa palabra clave, y solo puedes usar la palabra clave si solo usas tipos.
En cuanto a tu ejemplo, contiene más que solo tipos, por lo que necesitas actualizar a una versión más reciente (>= v7.13.0) de Babel que habilite el soporte de namespace por defecto, o cambiar la opción de configuración a allowNamespaces: true según el enlace en el error, https://babeljs.io/docs/en/babel-plugin-transform-typescript.