2015-05-25 5 views
1
// Modules/MyModule.ts -------------------------------- 
import fs = require("fs"); 

module Hello { 
    export function World(): string { 
     return "Hello World"; 
    } 
} 


// Main/App.ts ---------------------------------------- 
console.log(Hello.World()); // Cannot find name 'Hello' 

По некоторым причинам это приводит к ошибке, указанной выше. Странно, если я раскомментирую оператор импорта, я больше не получаю эту ошибку. (Он не используется в любом случае)TypeScript не будет разрешать модуль при использовании импорта

Оба производят ту же ошибку:

tsc Main/App.ts --module "commonjs"

tsc Main/App.ts --module "amd"

Является ли это действительно ошибка компилятора или я что-то отсутствует. Нужно ли мне указывать внешний модуль, как-то иначе?

ответ

4

Это приходит довольно много - ключ к радости и счастья в машинописном, чтобы выбрать либо внутренние модули или внешние модули, а не оба.

Я написал более подробно о choosing between internal and external modules in TypeScript. В нижней строке выберите только .

В вашем случае вам необходимо полностью зафиксировать внешние модули. Вот обновленный пример:

// Modules/Hello.ts -------------------------------- 
import fs = require("fs"); 

export function World(): string { 
    return "Hello World" 
} 

Имя модуля для указанного выше файла Hello, потому что он находится в файле с именем Hello.ts.

Вы можете использовать его как это ...

// Main/App.ts ---------------------------------------- 
import Hello = require("./Modules/Hello"); 

console.log(Hello.World()); 

P.S. Приложения узла скомпилированы с использованием режима commonjs - но это работает и для AMD.

+1

спасибо, что решает проблему. Это как-то имеет смысл сейчас, но, с другой стороны, это звучит как несоответствие в спецификации машинописного текста. – Aurus

+0

. Похоже, что это немного путается, но выбор между внутренними и внешними модулями является исключительным. – Fenton