Я изучаю создание файла определения машинописного текста для Plotly.js. Я просмотрел несколько примеров файлов определений в репозитории DefinitelyTyped. Один из вопросов, который приходит на ум, — это интерфейс для объекта Data. Объект данных представляет собой массив трассировок, как показано в plot-schema.
Рассмотрим этот пример объекта данных.
data = [
{
type: 'scatter',
x: [1, 2, 3],
y: [3, 1, 6],
marker: {
color: 'rgb(16, 32, 77)'
}
},
{
type: 'bar',
x: [1, 2, 3],
y: [3, 1, 6],
name: 'bar chart example'
}
];
Типы трассировки, такие как «точечная» и «столбчатая», могут иметь разные атрибуты. Например, тип трассировки «круговая» имеет атрибут «направление».
Хотя я хотел бы определить отдельные интерфейсы для каждого типа трассировки с учетом общих атрибутов в интерфейсе более высокого уровня, я не вижу хорошего способа сделать это.
Самый интуитивный подход, о котором я могу думать, - это что-то вроде этого...
interface Trace {
x: Array<any>;
y: Array<any>;
}
interface BarTrace extends Trace {
type: 'bar';
// bar specific members
}
interface ScatterTrace extends Trace {
type: 'scatter';
// scatter specific members
}
Это недопустимый машинописный текст. Ожидается тип, а не строка 'bar' или 'scatter'.
Кто-нибудь знает о других библиотеках с аналогичной структурой, которые имеют определения машинописного текста, или о лучшем способе структурирования файла определения машинописного текста для этой структуры JSON?
type : 'path' | 'point' | 'polygon';
в родительский типTrace
? Это не привязывает дочерние типы к конкретным строкам, но предоставление интерфейсу фиксированного свойства экземпляра, которое не изменяется, в любом случае не имеет смысла в системе типизации — у типа есть имя (BarTrace
,ScatterTrace
), которое его идентифицирует. & это свойство типа делает то же самое. - person Stop Slandering Monica Cellio   schedule 13.06.2016