2016-12-13 3 views
0

Я использую aurelia-cli и машинопись. Я пытаюсь интегрировать awesomplete в мое приложение. Так я бегу: npm install awesomplete --save, отредактированы aurelia.json:TS2307 при импорте awesomplete на aurelia с машинописными текстами

{ 
    "name": "awesomplete", 
    "path": "../node_modules/awesomplete", 
    "main": "awesomplete" 
} 

и установить определение TS с typings install dt~awesomplete --global --save

на мой файл TS, я импортировать его с import * as awe from 'awesomplete';, но я получаю TS2307: Cannot find module 'awesomplete'. Это мой первый раз, когда я использую ts, поэтому я думаю, что я делаю что-то неправильно, но не могу найти что. Любой намек, я пропустил шаг?

ответ

1

Компилятор, вероятно, не может найти файл определения, поскольку его недостаточно для установки через typings.
Как говорится в their FAQ:

Если вы используете файлы в tsconfig.json, добавьте индексный файл:

{ 
    "files": [ 
     "typings/index.d.ts" 
    ] 
} 

Если вы не используете tsconfig.json, добавьте в качестве ссылки на верхнюю часть Типные файлы:

/// <reference path="../typings/index.d.ts" /> 

Другой (и лучший вариант), если вы используете машинопись версии 2 и выше, чтобы использовать @types вместо типизации:

npm install @types/awesomplete --save 

Тогда вам не нужно ничего добавлять к TSconfig и не будет вам нужно для использования тегов reference.
Подробнее о @types: The Future of Declaration Files.

1

Я не вижу никаких сообщений export в typings/globals/awesomplete/index.d.ts. Это, вероятно, означает, что авторы типовых данных не рассматривали возможность загрузки awesomplete в качестве модуля и предполагали, что он будет использоваться только как простой скрипт, который определяет некоторые глобальные переменные. Таким образом, вы не можете импортировать что-либо из него, но вы можете иметь Awesomplete и AwesompleteOptions, доступные как глобальные, если вы включите в компиляцию awesomplete typings, как указано в ответе Ницца на ваш вопрос. Короче говоря, это компилируется без импорта:

let awe = new Awesomplete(document.getElementById('input-id')); 

Другими словами, типизации для awesomplete являются то, что раньше называлось ambient typings и не могут быть использованы каким-либо другим способом.

1

Очевидно, Awesomplete поддерживает определение модуля CommonJS, но не AMD (это то, что использует CLI). Я считаю, что самым простым было бы «добавление» его в файл aurelia.json. Как это:

{ 
    "name": "vendor-bundle.js", 
    "prepend": [ 
    "node_modules/bluebird/js/browser/bluebird.core.js", 
    "node_modules/awesomplete/awesomplete.js" 
    ], 
    ... 
} 

Или, вы можете загрузить его с помощью <script> тегов, которые всегда работает для устаревших библиотек.

В обоих случаях вам не нужно ничего импортировать, вы должны использовать Awesomplete в качестве глобальной функции.