2015-11-02 2 views
3

У меня есть два файла в той же папке:машинопись: в чем разница между импортом и варом

/src/routes/file1.ts

/src/routes/file2.ts

file1.ts

function greet(name: srting){ 
    return 'Hello +' name 
} 

export = greet; 

file2.ts (ссылки file1)

var f2 = require('./file1'); 

function another_greeting(name: string) 
{ 
    return f1.greet(name) + name; 
} 

exports f2; 

Эта конфигурация работает без проблем. Но если в file2 я указываю file1 этот путь

import f1 = require('./file1') 

жалобы компилятора с ошибкой: Не удается найти модуль»./file1' Это побуждает меня спросить: в чем разница между импортом внешнего файла с оператор «import» и оператор «var»?

+0

Подробнее об этом: https://basarat.gitbooks.io/typescript/content/docs/project/modules.html – basarat

ответ

2

Основное отличие заключается в том, что при использовании import затем машинописи компилятора (TSC) проверяет если файл ./file1 можно найти на основе конфигурации компилятора машинописи (я имею в виду главным образом --moduleflag)! Если вы используете только var f2 = require('./file1');, тогда TypeScript не делает такую ​​проверку.

Вы можете видеть из испытаний, как это ключевое слово import transpiled от TSC для commonjs модулей и AMD модулей:

CommonJS:https://github.com/Microsoft/TypeScript/blob/master/tests/baselines/reference/commonjsSafeImport.js

AMD:https://github.com/Microsoft/TypeScript/blob/master/tests/baselines/reference/amdImportNotAsPrimaryExpression.js

Есть много другие тесты в папке tests/baselines/reference.

Так что в вашем случае import следует перевести на var.

И почему это не работает? Ну, следующие работы на компьютере:

file1.ts:

function greet(name: string){ 
    return 'Hello ' + name; 
} 

export = greet; 

file2.ts:

import f1 = require('./file1'); 

function another_greeting(name: string) 
{ 
    return f1(name) + name; 
} 

console.log(another_greeting('test')); 

компилировать скрипты как это:

c:\Work\TypeScript-playground>tsc --module commonjs --target es5 file2.ts 

и работают следующим образом:

c:\Work\TypeScript-playground>node file2.js 
+1

поблагодарить за ответ. Я использую vs 2015, и, потратив несколько часов на эту проблему, по какой-то странной причине он работает сейчас. похоже, что это некоторые проблемы с моей визуальной студией ... – TheSoul

+0

Я рад, что вы заработали. –

+0

Я также пытаюсь успешно отлаживать файлы .ts в браузере. На сервере я использую typescript-node-express. Я могу ударить свои точки останова в файлах .ts, так как исходные карты работают хорошо. В браузере, хотя из-за того, что файлы .ts сначала скомпилированы в .js, а затем преобразованы с помощью браузера или webpack, sourcemaps не работают, и я не могу ударить точки останова в файлах .ts (в chrome .js даже не появляются на вкладка источника devtools). Удалось ли вам успешно отлаживать исходные файлы .ts на стороне клиента? – TheSoul

0

я, наконец, смог отладить мой файл .ts в хроме, попав как правило, точки останова внутри метров каждого .TS файла, следуя это предложение How can I debug modular TypeScript with source maps? и она работает очень хорошо.Печально видеть, что Microsoft не предоставила надлежащего инструмента для отладки своих технологий, в то время как Google может это сделать.

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