2016-04-20 3 views
3

Я установил 'interactive.js' с jspm (и npm для машинописного текста, чтобы быть счастливым). Приложение работает нормально, но мой код показывает ошибки:отключить неправильную ошибку машинописного текста

import { interact } from 'interact.js/interact' 
// ==> typescript error: TS2307: Cannot find module 'interact.js/interact' 

Я полагаю, что проблема имеет что-то делать с модулем НПМ, содержащим».js', но я не уверен. Во всяком случае, есть ли способ исправить это либо

A. Помощь машинопись найти модуль B. Отключить это специфическая ошибка (так как он работает отлично)

PS: вот мой файл tsconfig.json:

{ "exclude": 
    [ "node_modules" 
    , "jspm_packages" 
    , ".git" 
    , "typings/browser" 
    , "typings/browser.d.ts" 
    ] 
, "compilerOptions": 
    { "outDir": "dist" 
    , "target": "es5" 
    , "sourceMap": true 
    , "experimentalDecorators": true 
    } 
, "compileOnSave": false 
} 
+0

У вас есть определение (.d.ts) установлен файл? (И нет, я не думаю, что есть способ отключить определенные ошибки в TypeScript - раздражает, так как есть ошибка в компиляторе, которая делает 3 в моем проекте в ближайшее время ... Надеюсь, они скоро это добавят) –

+0

Там не является файлом определения interactive.js, но это не решит ошибку разрешения пути модуля ... – gaspard

+1

Если я удалю одно из определений для библиотеки в моем проекте, я получаю ту же ошибку - компилятор TypeScript не узнает, что модуль существует без файла .d.ts, если в пакет NPM нет встроенного пакета. См. Эту проблему в реестре Typcript: https://github.com/Microsoft/TypeScript/issues/3019. Должно быть решение этого в TypeScript 2.0, когда оно появляется, по-видимому: https://github.com/Microsoft/TypeScript/issues/6615. –

ответ

1

машинописи службы компилятор/язык фактически не разрешать имена модулей через файловую систему или ваш package.json, как вы могли бы ожидать - it instead uses the definition (.d.ts) files that define the type information.

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

Итак, решение этой проблемы - просто установить файлы определения, если они доступны, или написать/заглушить свой собственный, если нет. They'll be making this easier in TypeScript 2.0 by the sounds of it, но даже в его нынешнем виде, это занимает очень код, чтобы создать фиктивный определение:

declare module "interact.js/interact" { 
    export var interact: any; 
} 
+1

Я создал файл определения полного типа: https://github.com/lucidogen/interact.js и спросил автора, хочет ли он потянуть за изменениями в библиотеке. Благодаря :-) ! – gaspard

+1

@gaspard: Хорошо, что вы собираетесь сделать полное определение! –