web-dev-qa-db-fra.com

Uncaught ReferenceError: define n'est pas défini dactylographié

Je suis nouveau sur TypeScript, knockout et requirejs. J'ai créé une démo en utilisant ces fichiers. Maintenant, je veux implémenter une logique mineure en utilisant TypeScript et knockoutjs.

J'ai créé 4 à 5 fichiers TypeScript, qui sont importés en interne. Lorsque j'exécute le fichier html. Je reçois l'erreur indiquant. comme intitulé

enter image description here Quelqu'un peut-il m'aider sur cette erreur. Ce qui me manque dans ce code.

avoir recherché sur google et passer un bon moment mais je n'ai pas trouvé les bonnes solutions. Il doit être lié à requireJS pour définir tous les modules. Mais, comme nouveau dans requireJS pas en mesure de rattraper cela. J'ai également recherché stackoverflow pour l'erreur similaire, mais cela ne m'aide pas.

En attendant la solution

21
Prashant Kankhara

Ici, votre TypeScript a été compilé avec bonheur, en un code qui fonctionnera dans un environnement requireJS (techniquement, un ET [ environnement). Cela signifie qu'il génère une sortie qui suppose que définir/exiger etc existent déjà.

La réponse globale est que vous devez inclure RequireJS avant de dépendre de votre code compilé.

L'erreur suggère cependant que vous avez fait une erreur distincte: vous dépendez directement des scripts du module RequireJS (c'est-à-dire que vous avez une balise <script src="my-compiled-code.js"></script> Dans votre code HTML). Ce n'est pas ainsi que fonctionnent les modules. Au lieu de cela, une fois que vous avez rendu RequireJS disponible, vous devez avoir un seul script de démarrage de niveau supérieur (soit en ligne dans votre code HTML ou dans un fichier séparé) qui configure RequireJS, puis les fichiers de niveau supérieur de require() votre application pour tout démarrer. Vous pouvez charger ce fichier soit à la main, soit avec l'attribut "data-main" de RequireJS.

Par exemple, un HTML minimal ressemble à quelque chose comme:

<!DOCTYPE html>
<html>
    <head>
        <script data-main="scripts/main" src="scripts/require.js"></script>
    </head>
    <body>
    </body>
</html>

Cela charge RequireJS de 'scripts/require.js' et lui dit ensuite de charger le script dans 'scripts/main.js' pour démarrer le processus de chargement (vous voudrez probablement mettre à jour les deux chemins - notez que data-main ne fait pas pas besoin d'une extension .js).

Le script principal devrait alors être quelque chose de très simple comme:

// Set up any config you need (you might not need this)
requirejs.config({
  basePath: "/scripts"
});

// Tell RequireJS to load your main module (and its dependencies)
require("mainmodule");

Généralement, ce ne sont pas les problèmes de TypeScript que vous combattez ici, c'est RequireJS. J'essaierais de passer un peu plus de temps à jouer avec Exiger (peut-être en pur JavaScript, donc c'est plus clair) et à regarder des exemples de travail pour cela, afin que vous puissiez faire fonctionner ce bit en premier, puis ajouter le reste.

27
Tim Perry