我正在使用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
任何人都可以帮我这个吗? 在此先感谢:)
答案 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