2016-10-07 3 views
3

Я пытаюсь использовать некоторые внешние js-библиотеки из NPM с моим проектом с машинописными текстами, к сожалению, эти библиотеки не имеют определений @types, поэтому я взял для написания своих собственных. Определения, которые я написал, работают, когда я вставляю их в ./node_modules/@types/<library_name>/*.d.ts, но как только я перемещаю их, например. ./@types/<library_name>/*.d.ts они не получают подхвачен компилятором, и я получаю следующее сообщение об ошибке:TypScript 2 не может найти пользовательские определения

ERROR in ./utils/eventEmitter.ts 
(1,25): error TS2307: Cannot find module 'events'. 

Я использую: машинопись Версия: 2.0.3 от НОГО

У меня есть следующая структура проекта установка

@types/ 
-- events 
---- index.d.ts 
node_modules/ 
-- @types 
-----react, react-dom etc 
utils/ 
-- eventEmitter.js 
tsconfig.json 

в моей tsconfig.json у меня есть:

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "target": "es5", 
    "jsx": "react", 
    "allowJs": true, 
    "sourceMap": true, 
    "typeRoots" : [ 
     "./@types" 
    ], 
    "types" : [ 
     "events", 
     "ajax", 
     "path", 
     "keymirror" 
    ] 
    }, 
    "exclude" : [ 
    "node_modules", 
    "@types" 
    ] 
} 

в eventEmitter.js я следующее:

import * as events from "events"; 

Просто уточнить конкретный модуль событий JS расположен на ./node_modules/events/index.js

+0

работает также в этом же номере. Вы нашли решение? –

+0

Привет, да, оказывается, это была ошибка с машинописным текстом, я опубликовал решение как [ответ ниже] (http://stackoverflow.com/a/40045116/1494647) –

ответ

1

Проблема, описанная в моем вопросе, была признана ошибкой в ​​машинописном тексте (я использую 2.0.3).

Решение состоит в том, чтобы добавить следующие конфигурации в tsconfig.json:

{ 
"compilerOptions": { 
    ... 
    "paths": { 
     "*": ["*", "./@types/*"] 
    } 
    ... 
    } 
} 

в соответствии с: github issue

+0

Спасибо. Просто исправление, это «путь». –

+0

вправо, я только что обновил ответ –

0

Пожалуйста, используйте это так:

import * as events from "./events"; 

При использовании

import * as events from "events"; 

машинописный поиск для i т в node_modules, вы должны дать ему относительный путь с ./

+0

Привет, чтобы уточнить: события внешний модуль, поэтому javascript для этого модуля находится по адресу 'node_modules/events/index.js' –

+0

У вас есть установочные файлы? –

+1

Нет доступных для печати типов, мне пришлось написать свой собственный –

0

Вы можете сохранить свой файл описания файла в корневой директории вашего проекта и TSC будет найти его.

+0

Спасибо, но я боюсь, что это не работает и не очень расширяемое решение. –

+0

Это работает для меня. Не уверен, что вы подразумеваете под расширяемым решением. Этот файл является настраиваемым определением типа, специфичным для вашего приложения, и относится к исходному коду приложения. В любом случае, директория node_modules не будет частью вашего кода в системе управления версиями. Зачем держать его там? –

+0

Привет, вы можете уточнить, что вы подразумеваете под «сохранить файл определения файла в корневом каталоге вашего проекта». Похоже, вы хотели, чтобы я переместил файл './@ types/events/index.d.ts' в'./Index.d.ts' Я пробовал это, и он не работал для меня –

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