2016-10-19 3 views
1

Я работаю над угловым проектом 2 с угловым cli (1.0.0-beta.10) и хочу использовать эту библиотеку (https://github.com/Glench/fuzzyset.js). Когда я пытаюсь импортировать его, TypScript не принимает его как модуль, который я действительно не знаю почему. Это дает мне ошибку Cannot find module.Машинопись: Невозможно найти модуль угловой

В качестве обходного пути я попытался объявить его как модуль в моем system-config.ts файле

declare module "fuzzyset" {} 

Я импортировать его в одном из моих компонентов, как этот

import * as FuzzySet from 'fuzzyset'; 

и добавлены в System Config:

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

Я могу решить проблему. У него были некоторые проблемы с определением модуля, а TypScript не идентифицировал его как модуль. Изменение определения в библиотеке действительно работало, но это был неправильный путь. Конечным решением, которое работало без изменения библиотеки, было добавление его определения в 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

См this и this

+0

Спасибо за ответ. Вы используете Angular 2? Потому что он не работает для меня, он продолжает давать мне «Не могу найти модуль» – Kushina

+0

да. Угловая 2.1.0. проверьте config.js.Использует угловой/ядро ​​npm, последний из которых - 2.1.0 - см. [This] (https://www.npmjs.com/package/@angular/core). Вы попытались удалить этот модуль declare и просто импортировать FuzzySet из 'fuzzyset'. Я боюсь, если вы делаете это сложнее, чем нужно, чтобы импортировать простой экспортированный javascript модуль. – Mahesh

+0

Спасибо за ответ, но это не сработало для меня. – Kushina

Смежные вопросы