2016-10-19 166 views
1

我正在与angular-cli(1.0.0-beta.10)的角2项目,并希望使用此库(https://github.com/Glench/fuzzyset.js)。当我尝试导入它时,Typescript不接受它作为模块,我不知道为什么。它给我Cannot find module错误。Typescript:无法找到模块角

作为一种变通方法我试图将其声明为模块中我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

任何人都可以帮助我吗? 感谢提前:)

回答

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; 
} 
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

+0

感谢您的答复。你在使用Angular 2吗?因为它不适合我,它一直给我'找不到模块' – Kushina

+0

是的。 Angular 2.1.0。检查config.js。使用角/芯NPM,其最新的是2.1.0 - 参见[此](https://www.npmjs.com/package/@angular/core)。您是否尝试删除该声明模块,并仅从'fuzzyset'中导入FuzzySet。我担心,如果你使得导入一个简单的JavaScript导出模块变得复杂。 – Mahesh

+0

感谢您的答案,但它不适合我。 – Kushina