2017-04-18 5 views
19
definiert

Ich versuche, den Export und Import zu verwenden, aber es funktioniert nicht ich einen FehlerTyposkript Exporte nicht

Hier ist mein 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"; 

auch hier ist Screenshot der Ausnahme:

enter image description here

Antwort

13

Sie haben ein paar Optionen:

Option 1: Verwenden Sie ein Modul-Lader wie Webpack, Browserify usw.

Option 2: Wenn Sie nur *.ts zu *.js ohne Modul importiert kompilieren oder exportiere, setze compilerOptions.module auf "none" in deiner tsconfig.json. Beachten Sie, dass Sie keine Module exportieren/importieren können, wenn Sie compilerOptions.module auf "none" setzen.

+1

Kann ich Webpack in ASP.NET verwenden? – Js0n

+0

Sie können. Viel einfacher mit ASP.NET Core jetzt. Es gibt viele Beispiele online. – Saravana

+2

oder einfach Referenzen, als es funktioniert ohne Modullader und als commonjs, und Sie wollen nicht Hunderte von js-Dateien in Ihrem HTML laden ich denke, so nur Ausgabe 1 js-Datei – TypedSource

2

Maschinenschrift standardmäßig verwendet Knotenmodul Auflösung. Node.js/CommonJS verwendet exportiert Schlüsselwort. CommonJS wird jedoch nicht im Browser ohne Modullader oder Modulbündler ausgeführt. Daher benötigen Sie browserify oder webpack, um es im Browser laufen zu lassen.

Schauen Sie sich diesen Link https://www.typescriptlang.org/docs/handbook/gulp.html

können Sie legen auch Modul Einstellung keine in Compiler-Optionen Abschnitt in tsconfig.json:

{ "Compiler": { „target ":" es5 ", " Modul ":" keine " } }

+1

dies nicht richtig geschrieben werden soll. Ich laufe CommonJS in meinem Browser ohne Probleme. Sie können nicht exportieren und importieren im Browser ohne einen Modullader, das ist richtig. – TypedSource

+0

Sie haben Recht, ich habe meine Antwort korrigiert, um deutlicher zu werden. Sie benötigen einen Modullader oder einen Modulbündler, damit CommonJS im Browser funktioniert. Vielen Dank. – Ibro

7

versuchen Sie die folgenden

HTML ändert:

<!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" 
    ] 
    } 
} 

mit dieser Konfiguration die Ausgabe einer js Datei nur ist, was wunderfull uglified werden kann, werden alle referenzierten enthalten Dateien in der main.ts. Ich weiß nur nicht, ob ~/funktioniert oder wenn Sie den Pfad relativ zur Konfigurationsdatei einstellen müssen, ich arbeite nicht mit Linux.

User.ts

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

Main.ts:

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

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

alle Bezugserklärungen haben am Anfang der Datei

+2

Wow, ich habe gesucht Import vs Referenz für zu viele Stunden jetzt, vielen Dank! Das war die Wurzel meines Problems. – joe

+2

Diese Antwort funktioniert nicht für mich, ich bekomme dieses Problem: https://stackoverflow.com/questions/35963346/only-amd-and-system-modules-are-supported-alongside-out –

+0

@NickCoad sieht aus wie a Problem mit VisualStudio, ich benutze Atom, PHPStorm und IntelliJ und alles funktioniert gut. – TypedSource

Verwandte Themen