我正在使用aurelia-cli和打字稿。我想在我的应用程序上集成awesomplete。所以我运行:npm install awesomplete --save
,编辑aurelia.json
:
{
"name": "awesomplete",
"path": "../node_modules/awesomplete",
"main": "awesomplete"
}
并使用typings install dt~awesomplete --global --save
在我的ts文件中,我使用import * as awe from 'awesomplete';
导入它,但我得到了TS2307: Cannot find module 'awesomplete'
。
这是我第一次使用ts,所以我觉得我做错了但却找不到什么。任何提示,我都错过了一步吗?
答案 0 :(得分:1)
编译器可能无法找到定义文件,因为仅通过typings
安装它是不够的。
正如它在their FAQ中所述:
如果您使用tsconfig.json中的文件,请添加索引文件:
{
"files": [
"typings/index.d.ts"
]
}
如果您没有使用tsconfig.json,请添加为顶部的引用 TypeScript文件:
/// <reference path="../typings/index.d.ts" />
如果您使用的是打字稿版本2及更高版本,则另一个(更好的选择)是使用@types而不是打字:
npm install @types/awesomplete --save
然后您不需要向tsconfig添加任何内容,也不需要使用reference
标记。
有关@types
的更多信息:The Future of Declaration Files。
答案 1 :(得分:1)
我在export
中没有看到任何typings/globals/awesomplete/index.d.ts
声明。这可能意味着打字的作者没有考虑将awesomplete加载为模块的可能性,并且打算仅将其用作定义一些全局变量的普通脚本。因此,您无法从中导入任何内容,但如果您在编译中包含非常完整的输入,并且在Nitzan对您的问题的回答中进行了解释,则可以将Awesomplete
和AwesompleteOptions
作为全局变量提供。简而言之,这个编译没有任何导入:
let awe = new Awesomplete(document.getElementById('input-id'));
换句话说,awesomplete的类型是以前被称为ambient typings的,并且不能以任何其他方式使用。
答案 2 :(得分: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
作为全局函数。