2016-06-08 3 views
4

Я с трудом получаю машинописный распознавать форму локального модуля ES6:TypScript не может найти локальный модуль es6; Ошибка TS2307: Не удается найти модуль

новообращенного-time.js

export const minutes = sec => sec * 60 
export const hours = sec => minutes(sec) * 60 
export const days = sec => hours(sec) * 24 
export const weeks = sec => days(sec) * 24 
export const years = sec => days(sec) * 365 

Примечание: Я хотел бы чтобы выяснить, как заставить это работать, не меняя convert-time.js на файл машинописного текста.

Вот файл я пытаюсь импортировать его в:

index.ts

/// <reference path="../typings/convert-time.d.ts" /> 

import { minutes, days } from '../test/helpers/convert-time' 

Вот файл определение типа я создал:

новообращенного время .dts:

declare module "convert-time" { 
    export function minutes(sec: number): number; 
    export function hours(sec: number): number; 
    export function days(sec: number): number; 
    export function weeks(sec: number): number; 
    export function years(sec: number): number; 
} 

А вот мой TSconfig:

tsconfig.json

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "noImplicitAny": false, 
    "removeComments": true, 
    "preserveConstEnums": true, 
    "sourceMap": true, 
    "jsx": "react" 
    }, 
    "files": [ 
    "typings/index.d.ts", 
    "typings/convert-time.d.ts" 
    ], 
    "exclude": [ 
    "node_modules" 
    ] 
} 

Шаги пытавшиеся:

Ничего из вышеперечисленного не сработало! Какую темную магию я должен научиться, чтобы заставить это работать? Благодаря!

+0

В файле 'compilerOptions' вам нужно иметь' allowJs: true' к разрешить использование файлов JavaScript, иначе это приведет к ошибке. –

ответ

2

Что касается ES6

Поскольку вы пытаетесь между работать с модулем ES6 вы либо»

а) Измените ваш tsconfig.json целевой ES6 и испускают модули ES6 так:

{ 
    ... 
    "target": "es6", 
    "module": "es6", 
    ... 
} 

Однако я не думаю, что вы можете использовать модули ES6 еще в NodeJS.

или:

б) Пусть машинопись transpile модуля ES6 JavaScript до ES5, позволяя обработку JavaScript в вашем tsconfig.json под compilerOptions - как ниже, и убедившись, что .js файл включен/не исключены :

{ 
    ... 
    "target": "es5", 
    "module": "commonjs", 
    "allowJs": true, 
    ... 
} 

Что касается вашего типа деклараций

есть прочитанный на моем блог о том, как машинопись обнаруживает типизации/объявления типа и что он ожидает увидеть здесь: http://ivanz.com/2016/06/07/how-does-typescript-discover-type-declarations-definitions-javascript/

Оказывается, что этот файл JavaScript Ваш собственный код (не модуль НПМ), так:

  1. Вы надеваете» т потребуется /// <reference path="../typings/convert-time.d.ts" /> до тех пор, пока файл не исключены или включены в tsconfig.json
  2. Обеспечение convert-time.d.ts находится в том же каталоге, что convert-time.js
  3. Вам не нужно объявить модуль, поэтому удалите declare module "convert-time" { немного. Это связано с тем, что с .d.ts рядом с .js это «внешний» модуль, а не «ambient» (см. Мой блог) (вам понадобится бит declare, если, например, вы создавали типизацию, которая живет в вашем собственном код для пакета НПМ)

в основном:

../test/helpers/convert-time.js:

export const minutes = sec => sec * 60 
export const hours = sec => minutes(sec) * 60 
export const days = sec => hours(sec) * 24 
export const weeks = sec => days(sec) * 24 
export const years = sec => days(sec) * 365 

../test/helpers/convert- time.ts.d:

export function minutes(sec: number): number; 
export function hours(sec: number): number; 
export function days(sec: number): number; 
export function weeks(sec: number): number; 
export function years(sec: number): number; 

index.ts:

import { minutes, days } from '../test/helpers/convert-time'; 

tsconfig.json (для ES5 transpiling)

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "target": "es5", 
    "allowJs": true, 
    "noImplicitAny": false, 
    "removeComments": true, 
    "preserveConstEnums": true, 
    "sourceMap": true, 
    "jsx": "react" 
    }, 
    "files": [ 
    "/test/helpers/convert-time.ts.d", 
    "/test/helpers/convert-time.js", 
    "index.ts" 
    ] 
} 
+0

Спасибо, Иван, за подробное объяснение! Это помогло мне лучше понять, как машинописные поиски определений типов. Я избавился от всех внешних определений и ссылок. Шаг сборки завершается успешно, но, к сожалению, во время выполнения я получаю «Неожиданный экспорт токенов». Есть идеи? –

+0

@Raine Где ошибка и какой код? –

+0

Код указан точно так же, как вы указали. Ошибка возникает при преобразовании-time.js при запуске сервера во время выполнения. Похоже, требуется дополнительный шаг для транспиляции, чтобы преобразовать их в модули commonjs? –

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