Estoy usando typecript 1.6 con sintaxis de módulos es6.
Mis archivos son:
test.ts:
module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
}
main.ts:
import App from './test';
var a = new App.SomeClass();
Cuando intento compilar el main.ts
archivo, aparece este error:
Error TS2306: el archivo 'test.ts' no es un módulo.
¿Cómo puedo lograr eso?
javascript
typescript
ecmascript-6
Bazinga
fuente
fuente
Respuestas:
Extendido : para proporcionar más detalles basados en algunos comentarios
El error
Proviene del hecho descrito aquí http://exploringjs.com/es6/ch_modules.html
En base a lo anterior, necesitamos el
export
, como parte del archivo test.js. Vamos a ajustar el contenido de esta manera:Y ahora podemos importarlo de estas tres maneras:
Y podemos consumir cosas importadas como esta:
y llame al método para verlo en acción:
La parte original está tratando de ayudar a reducir la cantidad de complejidad en el uso del espacio de nombres
Parte original:
Realmente recomendaría que revise estas preguntas y respuestas:
¿Cómo uso espacios de nombres con módulos externos TypeScript?
Permítanme citar la primera oración:
En este caso, simplemente no necesitamos
module
dentro detest.ts
. Este podría ser el contenido ajustadotest.ts
:Leer más aquí
Exportar =
luego podemos consumirlo así:
Leer más aquí:
Módulo opcional de carga y otros escenarios de carga avanzada
fuente
Las respuestas anteriores son correctas. Pero por si acaso ... Tengo el mismo error en VS Code. Tuve que volver a guardar / recompilar el archivo que arrojaba el error.
fuente
¿Cómo puedo lograr eso?
Su ejemplo declara un módulo interno TypeScript <1.5 , que ahora se denomina espacio de nombres . La
module App {}
sintaxis anterior ahora es equivalente anamespace App {}
. Como resultado, lo siguiente funciona:Habiendo dicho eso...
Intente evitar exportar espacios de nombres y, en su lugar, exporte módulos (que anteriormente se denominaban módulos externos ). Si es necesario, puede usar un espacio de nombres en la importación con el patrón de importación del espacio de nombres como este:
fuente
Además de la respuesta de A. Tim, hay momentos en que incluso eso no funciona, por lo que debe:
fuente
export class... {
que angular no le gustó, dándome este problema. Después de arreglar el formato, compilado sin problemas.Además de la respuesta de Tim, este problema se produjo cuando dividí una refactorización de un archivo, dividiéndolo en sus propios archivos.
VSCode, por alguna razón, partes sangradas de mi código [clase], lo que causó este problema. Al principio fue difícil de notar, pero después de darme cuenta de que el código estaba sangrado, lo formateé y el problema desapareció.
por ejemplo, todo después de la primera línea de la definición de Clase se sangraba automáticamente durante el pegado.
fuente