打字稿:无法找到模块角

时间:2016-10-19 20:46:35

标签: angular typescript angular-cli

我正在使用angular-cli(1.0.0-beta.10)处理angular 2项目,并希望使用此库(https://github.com/Glench/fuzzyset.js)。当我尝试导入它时,Typescript不接受它作为一个我不知道原因的模块。它给了我Cannot find module错误。

作为一种解决方法,我尝试将其声明为system-config.ts文件

中的模块
declare module "fuzzyset" {}

我正在我的一个组件中导入它

import * as FuzzySet from 'fuzzyset';

并添加到系统配置:

System.config({
  paths: {
    // paths serve as alias
    'npm:': 'vendor/'
  },

  map: {
    'fuzzyset': 'npm:fuzzyset.js/index.js',
  },
  packages: cliSystemConfigPackages
});

但现在它给了Cannot invoke an expression whose type lacks a call signature.

要解决此错误,我将模块声明更改为:

declare module "fuzzyset" {
    export function FuzzySet(options?:any): any;
}

这确实可以解决所有问题,但是我在运行时遇到错误,如下所示: Browser console errors

任何人都可以帮我这个吗? 在此先感谢:)

2 个答案:

答案 0 :(得分:1)

我能够解决这个问题。它有一些模块定义问题,而Typescript并未将其识别为模块。修改库中的定义确实有效,但这不是正确的方法。在不修改库的情况下工作的最终解决方案是在typings.d.ts中添加其定义。如果你想看到代码:

declare module "fuzzyset" {
     function FuzzySet(options?: FuzzySet.FuzzySetOptions) : any;
     namespace FuzzySet {
         interface FuzzySetOptions {
             arr?: any;
             useLevenshtein?: any;
             gramSizeLower?: any;
             gramSizeUpper?: any;
         }
     }
     export = FuzzySet;
}

答案 1 :(得分:0)

只需使用:

  在app.ts中

import fuzzyset from 'fuzzyset' (app.ts)
  

在config.ts

map: {
    'fuzzyset': 'npm:fuzzyset.js/lib/fuzzyset.js',
}
  

类定义,

        export class App {

      a: any;  // fuzzyset
      printThis: array;
      name:string;
      constructor() {
        // start doing fuzzy stuff
        this.a = FuzzySet()  

        this.a.add("michael axiak");

        this.printThisVar = this.a.get("micael asiak");
        // end doing fuzzy stuff
        this.name = 'Angular2'
      }
    }
  @component中的

<p>{{printThisVar}}</p>
  

工作Plnkr here

参考thisthis