2015-09-04 3 views
0

Я следую за pre-fetch example from the Typeahead site, но я использую TypScript.Twitter Typeahead - ошибка Bloodhound в машинописном тексте

Я потянул в typeahead.d.ts file, и все в порядке, пока я не попытаюсь использовать экземпляр Bloodhound в качестве источника набора данных.

пример выглядит следующим образом:

var countries = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.whitespace, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    // url points to a json file that contains an array of country names, see 
    // https://github.com/twitter/typeahead.js/blob/gh-pages/data/countries.json 
    prefetch: '../data/countries.json' 
}); 

// passing in `null` for the `options` arguments will result in the default 
// options being used 
$('#prefetch .typeahead').typeahead(null, { 
    name: 'countries', 
    source: countries 
}); 

Так мой перевод машинопись выглядит следующим образом:

// typeahead for the employees box 
var emps = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.whitespace, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    prefetch: { url: prefetchUrl } 
}); 

$("#employee").typeahead(null, { 
    name: "emps", 
    source: emps 
}); 

Либо я перевел JS неправильно или файл d.ts неправильно, потому что возникает следующая ошибка:

Аргумент типа '{name: string; источник: Bloodhound < {}>; } 'не присваивается параметру типа «Набор данных».

Виды собственности «источник» несовместимы.

Тип 'Бладхаунд < {}>' не может быть присвоен типу '(query: string, cb: (result: any) => void) => void'.

Может ли кто-нибудь сказать мне, что я сделал не так, или что мне нужно внести в файл d.ts, чтобы его скомпилировать?

Созданный этим Javascript на самом деле отлично работает, но ошибки в машинописном машиностроении препятствуют созданию моего проекта.

Cheers.

ответ

0

Определение DataSet (что вы присваиваете источник быть) является:

source: (query: string, cb: (result: any) => void) => void; 

Где вы пытаетесь передать ему тип Bloodhound объекта.

Я бы предположил, что произошел смена фактического API или файл d.ts просто не обновлен.

После дальнейшего изучения в исходный код проекта представляется, что библиотека действительно занимает Bloodhound объект для источника ...

// use duck typing to see if source is a bloodhound instance by checking 
// for the __ttAdapter property; otherwise assume it is a function 
this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; 

Reference

Это, как говорится, я бы обновить d.ts на определенно набирается с помощью запроса на тягу или путем обращения к авторам.

Редактировать

Возможное обновление к d.ts:

source: (query: string, cb: (result: any) => void) => void | Bloodhound; 
+0

Я хотел бы, чтобы обновить файл d.ts, но я никогда не писал один раньше. Я попробовал пару настроек, но просто сломал это: (Возможно, время для чтения. – Nick

+0

@ Ник я просто обновляю ответ с чем-то, чтобы попробовать в вашем местном d.ts, и если это сработает, вы можете создать/отправить запрос на растяжение, чтобы определенно набрать – Brocco

+0

Закрыть, но это изменение выдает ошибку «Generic type» Bloodhound «требует 1 аргумент типа». – Nick

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