56 votes

Les exportations TypeScript ne sont pas définies

J'essaie d'utiliser les fonctions d'exportation et d'importation, mais cela ne fonctionne pas. Je reçois une erreur.

Voici mon code HTML:

 <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    @RenderBody()

    <script src="~/scripts/user.js"></script>
    <script src="~/scripts/main.js"></script>
</body>
</html>
 

User.ts:

 export class User {
    firstName: string;
    lastName: string;
}
 

main.ts

 import { User } from "./user";
 

Voici également une capture d'écran de l'exception:

entrez la description de l'image ici

33voto

Saravana Points 14313

Vous avez deux options:

Option 1: Utiliser un chargeur de module comme Webpack, Browserify, etc.

Option 2: Si vous voulez juste pour compiler *.ts de *.js sans module d'importations ou d'exportations, définissez compilerOptions.module "aucun" dans votre tsconfig.json. Notez que vous ne serez pas en mesure d'exporter/importer des modules lorsque vous définissez compilerOptions.module "aucun".

19voto

TypedSource Points 617

essayez les modifications suivantes

HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    @RenderBody()

    <!-- <script src="~/scripts/user.js"></script> --> <!-- not longer needed -->
    <script src="~/scripts/main.js"></script>
</body>
</html>

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "sourceMap": true,
    "outFile": "~/scripts/main.js",
    "lib": [
      "dom",
      "es2015",
      "es5",
      "es6"
    ]
  }
}

avec cette configuration, votre sortie est un seul fichier js ce qui peut être uglified wunderfull, contenant tous les fichiers référencés dans la main.ts. je ne sais pas si ~/ fonctionne ou si vous devez définir le chemin relatif vers le fichier de config, je ne suis pas sous linux.

De l'utilisateur.ts

class User {
    firstName: string;
    lastName: string;
}

Principal.ts:

/// <reference path="User.ts" />

// import { User } from "./user"; // not needed if referenced
console.log(new User());

toutes les déclarations doivent être écrites au début du fichier

7voto

Ibro Points 120

Texte dactylographié, par défaut, utilise le nœud du module de résolution. Node.js / CommonJS utilise les exportations de mot-clé. Cependant, CommonJS ne pas exécuter dans le navigateur sans un chargeur de module ou module de bundler. Par conséquent, vous avez besoin de browserify ou webpack pour obtenir en cours d'exécution dans le navigateur.

Consultez ce lien https://www.typescriptlang.org/docs/handbook/gulp.html

Vous pouvez également définir le module de réglage à aucun dans les options du compilateur section dans le tsconfig.json:

{ "compilerOptions": { "cible": "es5", "module": "none" } }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X