2017-01-27 7 views
9

Я использую TypScript с AMD и require.js, но я не могу заставить компилятор типа types выводить код, который будет выполнен после загрузки модулей.Typcript с AMD и require.js

Это main.ts:

import { foo } from './bar'; 

foo('world'); 

Это bar.ts:

export function foo(name: string) { 
    alert('Hello ' + name); 
} 

компилировать с помощью следующего tsconfig.json файла:

{ 
    "compilerOptions": { 
     "alwaysStrict": true, 
     "module": "amd", 
     "outFile": "client.js", 
     "target": "es5" 
    }, 
    "files": [ 
     "main.ts" 
    ] 
} 

И включить его в моем HTML, как это :

<script data-main="client/client.js" src="/static/require.js"></script> 

Однако сгенерированный код JavaScript выглядит следующим образом:

define("bar", ["require", "exports"], function (require, exports) { 
    "use strict"; 
    function foo(name) { 
     alert('Hello ' + name); 
    } 
    exports.foo = foo; 
}); 
define("main", ["require", "exports", "bar"], function (require, exports, bar) { 
    "use strict"; 
    bar.foo('world'); 
}); 

Все хорошо, за исключением того факта, что я хотел бы выполнить код в main модуля непосредственно. Таким образом, последнее определение должно быть

define(["require", "exports", "bar"], ... 

вместо

define("main", ["require", "exports", "bar"], ... 

В настоящее время, я должен был бы третий сценарий, написанный на JavaScript только для загрузки main модуль, и я считаю это плохой стиль, чтобы иметь main модуль как многоразовый код.

Как я могу заставить машинописный компилятор выводить main.ts в качестве исполняемого определения вместо определения модуля?

ответ

-1

Когда вы используете «импорт ...», TypeScript будет компилировать модули AMD, как показано в вашем вопросе. Не могли бы вы попробовать следующий код (также проверьте этот учебник: http://www.codebelt.com/typescript/typescript-amd-with-requirejs-tutorial/), чтобы проверить, приводит ли он результат, который вы запрашиваете?

/// <reference path="[YOUR IMPORT FILE]" /> 
/// ... 

/** 
* Main entry point for RequireJS 
*/ 
require(
    [ 
     // YOUR IMPORT DEFINITIONS 
    ], 
    (/* YOUR IMPORT VARIABLES */) => { 
     'use strict'; 

     // YOUR CODE HERE 
    } 
); 
+1

Не используйте '/// ' с модулями. Просто «импортируйте» их. –

Смежные вопросы