2017-04-18 351 views
19

我試圖用出口和進口,但它不工作我得到一個錯誤打字稿出口沒有定義

這裏是我的代碼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"; 

這裏也是例外的截圖:

enter image description here

回答

13

你有兩個選擇:

選項1:使用一個模塊管理器,例如Webpack,Browserify等

選項2:如果你只是想編譯*.ts*.js沒有任何模塊導入或出口,在tsconfig.json中將compilerOptions.module設置爲「無」。請注意,當您將compilerOptions.module設置爲「無」時,您將無法導出/導入模塊。

+1

我可以在ASP.NET中使用Webpack嗎? – Js0n

+0

你可以。現在使用ASP.NET Core更容易。網上有很多例子。 – Saravana

+2

或簡單地使用引用,比它沒有任何模塊加載器和commonjs,並且你不想在你的html中加載數百個js文件我想,所以只輸出1個js文件 – TypedSource

2

打字稿默認使用節點模塊的分辨率。 Node.js/CommonJS使用導出關鍵字。但是,如果沒有模塊加載器或模塊捆綁器,CommonJS不能在瀏覽器中運行。因此,您需要browserify或webpack才能使其在瀏覽器中運行。

退房此鏈接https://www.typescriptlang.org/docs/handbook/gulp.html

您還可以設置模塊設置爲none 編譯器選項tsconfig.json

{ 「compilerOptions」:{ 「目標「:」es5「, 」module「:」none「 } }

+1

這是不正確的開始被寫入。我在瀏覽器中運行CommonJS沒有任何問題。如果沒有模塊加載器,你不能在瀏覽器中使用導出和導入,這是正確的。 – TypedSource

+0

你是對的,我更正了我的答案,對它更加明確。您需要一個模塊加載器或模塊捆綁器才能使CommonJS在瀏覽器中工作。謝謝。 – Ibro

7

嘗試以下變化

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

這個配置你的輸出只有一個js文件有什麼方法可以變醜wunderfull,包含所有被引用main.ts文件我只是不知道如果〜/工作,或者如果你必須設置路徑相對於配置文件,我不使用Linux。

User.ts

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

主。TS:

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

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

所有參考聲明必須在文件

+2

哇,我一直在尋找導入vs引用太多時間了,非常感謝你!這是我的問題的根源。 – joe

+2

這個答案不適用於我,我得到這個問題:https://stackoverflow.com/questions/35963346/only-amd-and-system-modules-are-supported-alongside-out –

+0

@NickCoad看起來像一個VisualStudio的問題,我使用Atom,PHPStorm和IntelliJ,所有工作都很好。 – TypedSource