2016-09-09 9 views
0

Предыдущим было this one. Текущий - Overview/reachbz.ts(3,28): error TS2306: File 'typings/immutable-3.8.1.d.ts' is not a module.Как работают типы машинописных модулей и почему я продолжаю получать ошибки

Может ли кто-нибудь объяснить мне, как модули amd работают в машинописном тексте? После прочтения информации на странице машинописного текста я до сих пор не могу понять, как это работает и что происходит не так.

У меня есть GIT репозиторий, чтобы воспроизвести ошибку:

git clone https://github.com/amsterdamharu/typescriptHorrors.git 

` В соответствии с просьбой; вот файлы:

///<reference path="../typings/immutable-3.8.1.d.ts" /> 
import Immutable = require("typings/immutable-3.8.1");//error here 
console.log("Immutable:",Immutable); 

/typings/immutable-3.8.1.d.ts здесь: https://github.com/facebook/immutable-js/blob/master/type-definitions/Immutable.d.ts

tsconfig.json:

{ 
    "compilerOptions": { 
     "target": "es5", 
     "watch": false, 
     "module": "amd", 
     "removeComments": true, 
     "sourceMap": false, 
     "outDir": ".", 
     "rootDir": "." 
    } 
} 

task.json (для vscode)

{ 
    "version": "0.1.0", 
    "command": "tsc.cmd", 
    "isShellCommand": true, 
    "showOutput": "always", 
    "problemMatcher": "$tsc" 
} 

Это работает на компьютере с Windows, но при попытке дома на Linux с той же ошибкой. Использование tsc-узла:

[[email protected] ts]$ tsc 
Overview/reachbz.ts(4,28): error TS2306: File 'typings/immutable-3.8.1.d.ts' is not a module. 

Код компилируется и работает с requirejs, но ошибки мешают мне опубликовать это.

Это еще одна вещь, которую я действительно не понимаю. Typcript должен был быть необязательно интрузивным, но он эскалирует вещи, которые должны быть предупреждениями (создает правильный скрипт после компиляции), поэтому в Visual Studio вы не можете опубликовать проект.

[UPDATE]

Изменение содержимого файла описания с:

export var whatever 

делает ошибку уйти.

Но следующее содержание вызовет ошибку вернуться

declare module Immutable {} 

declare module "immutable" { 
    export = Immutable 
} 

Есть ли кто-нибудь, кто может скомпилировать GIT репозиторий? Он использует оригинальный неизменный файл определения мерзавец репо, но я не могу заставить его работать с узлом TSC Версия 1.8.10

+2

Пожалуйста, включите соответствующий код и информацию в этом вопросе, даже если его можно найти в другой поток, с которым вы связались. –

+0

@ NitzanTomer Добавил еще несколько материалов по запросу. Интересно, может ли кто-нибудь скомпилировать это без ошибок. Кажется, что что-то не так с определением типа. – HMR

ответ

2

В коде:

import Immutable = require("typings/immutable-3.8.1");//error here 

не Является абсолютным нет нет.

Первый: Вам не нужно загружать описания типов для immutable. Они приходят с неизменными js.

Вторично: вы не require TypeScript определения. Фактически требуется фактическое время выполнения. В вашем случае это будет immutable так import Immutable = require('immutable').

Больше

определения Ambient предназначены для согласования JavaScript импорта во время выполнения. Таким образом, вы получите определения типов в контексте компиляции (например, с помощью tsconfig.json), а затем просто напишите JavaScript. Подробнее: https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

0

Я предполагаю, что на основе содержимого файла описания typescript использует разные правила для разрешения строки, которую вы передаете, чтобы потребовать. В этом случае, поскольку определение имеет:

declare module "immutable" { 
    export = Immutable; 
} 

мне нужно требовать со строкой «неизменной» и name of the definition file не имеет значения.

Изменение файла определения:

declare module "reverseEngineerInsteadOfDocumented" { 
    export = Immutable; 
} 

работает, когда вы изменить строку, переданную требовать, чтобы:

import Immutable = require("reverseEngineerInsteadOfDocumented"); 

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

  • Нет связанных вопросов^_^