Определение типа машинописного текста для d3 sankey

У меня есть код javascript, который использует плагин d3 sankey для создания диаграммы. В моем новом проекте мне нужно повторно использовать тот же код, но новый проект находится в машинописном тексте. Я ищу файл DefinitelyTyped для плагина. Я просмотрел https://github.com/DefinitelyTyped/DefinitelyTyped, но не смог его найти.

Есть ли другое место, откуда я могу получить этот файл?

Ссылка на плагин Sankey: https://github.com/d3/d3-sankey

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

Код в плагине d3 выглядит примерно так:

d3.sankey = функция () {

// Остальной код идет сюда

}

Как я использую его в javascript, показано ниже:

d3.sankey().nodeWidth(30).size([100,100]);

Был бы признателен за любую помощь или руководство.

Спасибо!


person AgentHunt    schedule 23.02.2017    source источник


Ответы (2)


В качестве предупреждения я только что отправил Pull Request #16051 в DefinitelyTyped, который содержит определения TS для d3-sankey.

После объединения они будут опубликованы в соответствии со стандартным процессом в npm/@types. т.е. npm install --save-dev @types/d3-sankey подойдет.

ВАЖНО: Когда я писал их, я заметил, что текущая документация по API в репозитории d3-sankey нуждается в некотором исправлении (например, отсутствующие методы, упоминание функций доступа, которые не используются в кодовой базе)

Когда у меня будет секунда, я зарегистрирую там проблему / отправлю PR.

ОБНОВЛЕНИЕ (01.05.2017):

«Официальные» определения TypeScript для d3-sankey теперь доступны (см. npm @types/d3-sankey). Просто используйте их с npm, как указано выше.

PR для обновления фактической документации API d3-sankey для отражения исходного кода все еще ожидает слияния здесь.

person tomwanzek    schedule 21.04.2017
comment
В качестве продолжения я открыл вопрос о документе API здесь - person tomwanzek; 21.04.2017

Вам необходимо расширить определение типа d3, включив в него метод sankey() и методы, которые он принимает.

Как минимум, вам нужно расширить модуль d3 файлом объявления, чтобы было ясно, что d3 был расширен модулем d3-sankey. Вы делаете это, создавая файл определения, который вы помещаете непосредственно в @types со следующим содержимым:

declare module 'd3' {
    export function sankey(...args[]) : any;
}

Это сообщает TS, что имеется модуль d3 и что он экспортирует указанную функцию. Если модуль d3 уже существует, он расширяет этот модуль.

Таким образом, вы можете импортировать сервис d3 и использовать его:

import dd3 = require('d3');
dd3.sankey();

Если вы хотите расширить файл типов, вы вместо этого пишете файл определения следующим образом:

declare module 'd3' {
    interface ISankey {
        nodeWidth() : number;
        nodeWidth(width : number|{(arg: number) : number}) : void;
        // Add Other d3.sankey Methods Here
    }
    export function sankey() : ISankey;    
}
person Rich Seviora    schedule 23.02.2017
comment
Я попытался создать файл с объявлением и поместил его в свой каталог @types вместе с другими файлами определений для d3, jquery и т. д. Однако, похоже, мое приложение не может загрузить определение. то есть он не может найти функцию sankey(). Нужно ли также обновлять файлы index.d.ts для d3? Я не хочу обновлять это или sankey.js, так как это внешние файлы. Кроме того, я заметил, что в других папках определений типов есть index.d.ts, package.json и types-metadata.json. Нужна ли мне подобная структура? - person AgentHunt; 23.02.2017
comment
Нет; эти другие файлы (index.d.ts, package.json и т. д.) существуют, потому что они поставляются в виде модулей npm. Когда вы импортируете d3, как вы это делаете? Я заметил, что если бы я сделал import d3 = require('d3');, это не разрешилось бы, но изменение импортированной переменной на dd3 работало нормально. - person Rich Seviora; 23.02.2017
comment
Я импортировал так, как вы указали (dd3). Имеет ли значение, как я называю файл? Я попробовал index.d.ts/sankey.d.ts. Я не уверен, имеет ли значение размещение файла. Я поместил его в корень папки @types, а также в папку @types\d3. Я предположил, что если имя файла заканчивается на «d.ts», оно должно быть загружено. Кроме того, в html необходимо указать ссылку на sankey.js. правильный? - person AgentHunt; 23.02.2017
comment
Забыл упомянуть, что dd3 разрешает все остальные элементы d3. - person AgentHunt; 23.02.2017
comment
Хм. Можете ли вы указать свой tsconfig.json и расположение этого файла, а также другие файлы определений? Это должно было поднять его. - person Rich Seviora; 26.02.2017
comment
Хорошо, заявив, что модуль работает. Но мне также нужно было добавить d3.js в мой проект. Спасибо! - person AgentHunt; 27.03.2017