使用打字稿在aurelia上导入awesomplete时的TS2307

时间:2016-12-13 16:31:21

标签: typescript aurelia

我正在使用aurelia-cli和打字稿。我想在我的应用程序上集成awesomplete。所以我运行:npm install awesomplete --save,编辑aurelia.json

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

并使用typings install dt~awesomplete --global --save

安装ts定义

在我的ts文件中,我使用import * as awe from 'awesomplete';导入它,但我得到了TS2307: Cannot find module 'awesomplete'。 这是我第一次使用ts,所以我觉得我做错了但却找不到什么。任何提示,我都错过了一步吗?

3 个答案:

答案 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对您的问题的回答中进行了解释,则可以将AwesompleteAwesompleteOptions作为全局变量提供。简而言之,这个编译没有任何导入:

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作为全局函数。