Estou usando o typescript 1.6 com sintaxe de módulos es6.
Meus arquivos são:
test.ts:
module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
}
main.ts:
import App from './test';
var a = new App.SomeClass();
Quando estou tentando compilar o main.ts
arquivo, recebo este erro:
Erro TS2306: O arquivo 'test.ts' não é um módulo.
Como posso conseguir isso?
javascript
typescript
ecmascript-6
Bazinga
fonte
fonte
Respostas:
Estendido - para fornecer mais detalhes com base em alguns comentários
O erro
Vem do fato descrito aqui http://exploringjs.com/es6/ch_modules.html
Com base no exposto, precisamos de
export
, como parte do arquivo test.js. Vamos ajustar o conteúdo assim:E agora podemos importá-lo com estas três maneiras:
E podemos consumir coisas importadas como esta:
e chame o método para vê-lo em ação:
A peça original está tentando ajudar a reduzir a quantidade de complexidade no uso do espaço para nome
Peça original:
Eu realmente sugiro fortemente para verificar este Q & A:
Como uso os espaços para nome com os módulos externos do TypeScript?
Deixe-me citar a primeira frase:
Nesse caso, simplesmente não precisamos
module
dentro detest.ts
. Este poderia ser o conteúdo ajustadotest.ts
:Leia mais aqui
Exportar =
mais tarde podemos consumi-lo assim:
Leia mais aqui:
Carregamento opcional do módulo e outros cenários de carregamento avançado
fonte
As respostas acima estão corretas. Mas por via das dúvidas ... Obtive o mesmo erro no VS Code. Teve que salvar novamente / recompilar o arquivo que estava lançando um erro.
fonte
Como posso conseguir isso?
Seu exemplo declara um módulo interno TypeScript <1.5 , que agora é chamado de espaço para nome . A
module App {}
sintaxe antiga agora é equivalente anamespace App {}
. Como resultado, o seguinte funciona:Dito isto ...
Tente evitar a exportação de espaços para nome e, em vez disso, exporte os módulos (que antes eram chamados de módulos externos ). Se necessário, você pode usar um espaço para nome na importação com o padrão de importação do espaço para nome como este:
fonte
Além da resposta de A. Tim, há momentos em que mesmo isso não funciona, então você precisa:
fonte
export class... {
que o angular não gostou, dando-me esse problema. Depois de corrigir a formatação, compilado sem problemas.Além da resposta de Tim, esse problema ocorreu quando eu estava dividindo uma refatoração de um arquivo, dividindo-o em seus próprios arquivos.
O VSCode, por algum motivo, recuou partes do meu código [class], o que causou esse problema. Isso foi difícil de notar no começo, mas depois que percebi que o código estava recuado, formatei o código e o problema desapareceu.
por exemplo, tudo após a primeira linha da definição de classe foi recuado automaticamente durante a colagem.
fonte