Ao tentar implementar um módulo seguindo o manual oficial, recebo esta mensagem de erro:
Uncaught ReferenceError: as exportações não estão definidas
em app.js:2
Mas em nenhum lugar do meu código eu uso o nome "exportação".
Como posso resolver isto?
let a = 2;
let b:number = 3;
import Person = require ('./mods/module-1');
export class Person {
constructor(){
console.log('Person Class');
}
}
export default Person;
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": true,
"outDir": "scripts/"
},
"exclude": [
"node_modules"
]
}
Poucas outras soluções para esta questão
<script>var exports = {};</script>
Esta resposta pode não funcionar, dependendo se você'não estiver mais visando es5
, I'vai tentar tornar a resposta mais completa.
Se CommonJS está't instalado (que define exportações
), você tem que remover esta linha do seu tsconfig.json
:
"module": "commonjs",
De acordo com os comentários, isto por si só pode não funcionar com versões posteriores do tsc
. Se esse for o caso, você pode instalar um carregador de módulos como o CommonJS, SystemJS ou RequireJS e então especificar isso.
Veja o seu arquivo main.js
que o tsc
gerou. Você encontrará isto mesmo no topo:
Object.defineProperty(exports, "__esModule", { value: true });
É a raiz da mensagem de erro, e depois de remover "module": "commonjs",
, ela desaparecerá.
Eu tinha o mesmo problema e o resolvi adicionando "es5" biblioteca para tsconfig.json como esta:
{
"compilerOptions": {
"target": "es5", //defines what sort of code ts generates, es5 because it's what most browsers currently UNDERSTANDS.
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true, //for angular to be able to use metadata we specify in our components.
"experimentalDecorators": true, //angular needs decorators like @Component, @Injectable, etc.
"removeComments": false,
"noImplicitAny": false,
"lib": [
"es2016",
"dom",
"es5"
]
}
}