¿Las tres opciones de exportación son exactamente equivalentes?
// foo.ts export const foo = () => {} // foo.ts const foo = () => {} export default { foo } // foo.ts const foo = () => {} export { foo } Descargo de responsabilidad: sé que import { foo } from './foo' funcionará igual en todos los escenarios, pero ¿hay algún matiz?
Particularmente interesado en cualquier matiz que pueda ocurrir al tener una base de código mixta ts y js.
Usando tsconfig "module": "CommonJS" , nodejs v14 y mecanografiado 4.2.4
La respuesta corta es no, no son lo mismo, tienen una sintaxis diferente, pero seamos serios.
export const foo = () => {} ... "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.foo = void 0; var foo = function () { }; exports.foo = foo;Es lo que se compila para usar commonjs y es5 como destino.
const foo = () => {} export default { foo } ... "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var foo = function () { }; exports.default = { foo: foo };Es lo que compila.
const foo = () => {} export { foo } ... "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.foo = void 0; var foo = function () { }; exports.foo = foo;Es lo que compila.
Junto con eso, también se debe tener en cuenta que el uso de:
export { foo }Solo se puede importar usando:
import {foo} from './foo'Durante el uso:
export default { foo }Solo se puede importar usando:
import whatever from './foo' // use whatever.foo