مع تزايد شعبية TypeScript ، أعتقد أن هذا يجب أن يحدث. بدأت العديد من حزم js الأخرى في تضمين كتاباتها (الرسمية) الآن. بدلاً من ترك الأمر لمجتمع DefinitelyTyped
هذا شيء نفكر فيه. يجب أن يكون من الممكن إنشاء برنامج نصي للعقدة لإنشاءه تلقائيًا من تفريغ API الخاص بنا.
+1 👍 مني أيضًا. إن repo DefinitelyTyped قديم ، حيث تم تحديث الخصائص المتفرقة والعرضية فقط بعد Highcharts v4.2.x. لكن معظم التغييرات في Highcarts لا تتم معالجتها ببساطة.
لذلك يجب تحديث الريبو من نوع DefinitelyTyped أو - بشكل أكثر ملاءمة - تضمينه مع Highcharts سيكون حلاً أفضل بكثير.
يبدو أن إنشاءه تلقائيًا يعد خيارًا رائعًا ، ولكن هذا قد يتطلب عملاً يدويًا من جانب كتابة الاختبارات لملف .d.ts؟ أيضًا ، قد يكون إنشاءه تلقائيًا.
سأكون على استعداد للقيام ببعض الأعمال في تحديث ريبو DefinitelyTyped إلى الإصدار الحالي ، والقيام بعلاقات عامة على https://github.com/highcharts/highcharts إذا كنت تريد تضمين الملف اليدوي هناك؟
تضمين التغريدة
^ لقد قمت بإنشاء علاقات عامة لـ DefinitelyTyped repo الذي
سيكون وجود تعريفات رسمية لنوع TypeScript محل تقدير كبير. يساعد كثيرًا عند كتابة مخطط تكوين.
ها نحن هنا مرة أخرى مع تعريفات النوع نسخة رئيسية وراء الواقع. : /
نظرًا لتعقيد هذه المكتبة ، أعتقد أن أفضل حل هو إنشاء نوع defs من "ملف تفريغ API" الذي أشار إليه @ TorsteinHonsi . ومع ذلك ، يبدو أن هذا الارتباط معطل. هل يوجد واحد جديد؟ سأكون على استعداد لأخذ طعنة في كتابة مولد.
ومع ذلك ، يبدو أن هذا الارتباط معطل. هل يوجد واحد جديد؟
نعم ، الجديد متاح من https://api.highcharts.com/highcharts/tree.json. يتم إنشاء هذه الشجرة من تعليقات JSDoc الخاصة بنا وكود المصدر المحلل.
تضمين التغريدة
TorsteinHonsi شكرا
نحن نستخدم JSDoc 3 ، لكننا نمتد بشكل كبير لنكون قادرين على وصف هيكل خياراتنا التصريحية.
TorsteinHonsi بالنظر إلى JSON لدي بعض الأسئلة ... ليس لديك أي توثيق مخطط لهذا التنسيق بأي حال من الأحوال؟ هذا ما جمعته . كيف تحدد الخيارات التي تم تمريرها إلى Highcharts.setOptions()
مقابل Highcharts.chart()
(على سبيل المثال)؟ هل يوجد ملف تفريغ API للفئات ومساحات الأسماء أيضًا؟
تضمين التغريدة
مرحبًا aaronbeall ، ليس لدينا أي توثيق شامل للمخطط في هذا الوقت ، ولكن يبدو أنك حصلت عليه بالكامل في تعريفك.
يتم التعامل مع خيارات Highcharts.setOptions()
والمسلسل كحالات خاصة خارج المخطط نفسه حيث نستخدمه ، ولكن يجب علينا تغيير global
و lang
على الأقل خارج هيكل الخيارات الرئيسية.
كملاحظة جانبية ، كان تنسيق التفريغ القديم متاحًا على https://api.highcharts.com/dump.json ، وقد أعدناه الآن إلى الموضع الأصلي على https://api.highcharts.com/highcharts/ الخيار / dump.json.
شكراcvasseng. لقد بدأت في العبث بهذا ... هناك الكثير من البيانات ، لقد قطع عملي من أجلي فقط لفهم كل شيء. :) لقد لاحظت أن بعض الحقول ليس لها نوع وليس افتراضيًا لاستنتاج النوع منها ، مثل boost.seriesThreshold
، ومع ذلك يظهر النوع
(لدي المزيد من الأسئلة ، هل هناك مكان أفضل لمناقشة هذا؟ Gitter؟ أنا بخير هنا ولكن من المحتمل أن يكون هناك قدر كبير من الضوضاء لبعض الناس.)
يبدو أن نوع boost.seriesThreshold
خطأ في tree.json
(وفي المستندات الحية) - من المفترض أن يكون رقمًا وليس سلسلة. بالنظر إلى doclet الفعلي الذي تم إنشاؤه منه ، فإن النوع مفقود منه. من المحتمل أن يكون هذا هو الحال بالنسبة لأي أماكن أخرى حيث تكون الأنواع مفقودة أيضًا. نحن نعمل على إضافة المزيد من الاختبارات والفحوصات إلى ممر التوليد للعثور تلقائيًا على هذه الاختبارات عند تغيير المستندات لمنع حدوث ذلك.
ليس لدينا مخطط لمساحات الأسماء / الفئات ، ولكن يتم التعامل معها بواسطة Vanilla JSDoc 3 ، لذلك قد يكون من الممكن إضافة مكون إضافي موجود لإنشاء تعريفات مطبوعة تلقائيًا لهم. يمكن العثور على الإعداد الخاص بهذا الجزء هنا: https://github.com/highcharts/highcharts-docstrap
ومناقشة هذا هنا تعمل بشكل جيد. :) بهذه الطريقة يكون لدينا مكان عام مركزي لذلك ، حتى يتمكن الآخرون من متابعته أيضًا.
في حالة ما إذا كان ذلك مفيدًا ، فهذا ملف تفريغ لجميع الحقول (في المخططات العالية / الشجرة. json) التي لا يبدو أن لها نوعًا. يبدو الفحص السريع للأنواع المستنبطة من القيم الافتراضية (سلسلة ، رقم ، منطقية) صحيحًا بالنسبة لي ، لكن تلك التي تقول "تعذر تحديد النوع" تعني أنني لم أجد خاصية type
أو default
، لذا تم تعيينها إلى any
. يمكنني كتابة ملف تصحيح لتلك الأنواع ، أم أن هناك طريقة أفضل؟
يوجد أيضًا مفتاح فارغ في المستوى الأعلى JSON وفي mapNavigation.buttons
.
لقد أحرزت بعض التقدم في هذا اليوم ، يمكنك أن ترى ما تم إنشاؤه حاليًا هنا . هناك الكثير من العمل المتبقي لجعل هذه الجودة العالية. سأدفع إلى الريبو غدًا. على مستوى عالٍ ، واجهت بعض المشكلات:
Highcharts.Options
و Series
وصولاً إلى كائنات صغيرة محددة جدًا مثل PlotOptionsBbTopLine
. لتجنب تعارض الأسماء ، يحول الاسم الكامل إلى PascalCase ، على سبيل المثال من plotOptions.bb.topLine
. ما زلت أحاول معرفة كيفية جعل هذا أفضل. محاولة المقارنة مع @types/highcharts
هو أمر صعب بعض الشيء ، في كثير من الأحيان لا توجد أشياء هناك.highstock
و highmaps
في المشروع ...&
لأن extends
كان يثير الكثير من الأخطاء حول الامتداد غير المتوافق. لا يوجد حاليًا معالجة لـ excludes
، لقد بدأت اللعب بالنوع Omit
لكن هذا أثار الكثير من الأخطاء حول الحقول المحذوفة غير الموجودة في النوع. أعتقد أن هذا يرجع إلى أنه في بعض الحالات ترث خاصية الكائن بشكل غير مباشر من الأصل ، لذلك لا تحتوي في الواقع على الحقول التي يجب حذفها ، كما تفعل خاصية الكائن الأصل. plotOptions.mfi.params
مثال على ذلك ، فهو يستثني index
لكن لا يحتوي على خاصية index
أو extends
كائن لا يفعل ذلك ، لكن الأصل plotOptions.mfi
يمتد plotOptions.sma
الذي به خاصية طفل plotOptions.sma.params
تحتوي على index
والتي تم دمجها مع الأصل بـ plotOptions.mfi.params
. نعم ، ما زلت تعكر كيفية التعامل مع هذا. :) يبدو أنني بحاجة إلى تقييم الشجرة المدمجة بالكامل وتحديد الأنواع من هناك ...Array
، Object
، Function
... من المحتمل أن تكون جميعها موثقة جيدًا في الأوصاف ولكن لا يبدو أن يتم التعبير عنها في الأنواع. ربما يعمل بعض التصحيح الحكيم لبيانات النوع على إصلاح ذلك. المفضل لدي هو Array.<Array.<Mixed>>
- ليس لدي فكرة عما هو عليه الآن. :)بعض الأشياء المحددة الأخرى:
Color
و CSSObject
و Mixed
؟ يبدو أن Color
تم تنسيقه string
، CSSObject
كائن نمط قياسي ، أو شيء خاص؟series.bellcurve.data
و series.histogram.data
حد سواء ، إلى إنشاء مراجع دائرية. أعتقد أن هذا مجرد خطأ مطبعي ، فمن المحتمل أن يقصدوا تمديد شيء آخر؟أيضًا ، بعض الأنواع المفقودة ليست مفقودة في واجهة برمجة التطبيقات ، على سبيل المثال https://api.highcharts.com/highstock/plotOptions.bb.topLine.styles.lineColor. إذا كنت أتذكر بشكل صحيح ، فنحن نكتب التخمين في منشئ api-docs
، ولكن يمكن نقل هذا إلى البرنامج النصي highcharts.jsdoc.js
لذلك سيكون جزءًا من tree.json.
cvasseng ما هي حالة تعريفات TypeScript الرسمية الخاصة بنا؟
تم تحميل الريبو للعب مع هذا ، على الرغم من عدم وجود إضافات اليوم.
إذا كنت أتذكر بشكل صحيح ، فنحن نكتب التخمين في المولد
api-docs
سأكون فضوليًا لفهم كيفية عمل المولد api-docs
. إنه يقوم بعمل جيد في فهم تفريغ API. أجد أشياء لست متأكدًا من كيفية التعامل معها. على سبيل المثال ، يمتد series.bullet.data.targetOptions
series.bullet.targetOptions
، لكن تعريف series.bullet.targetOptions
غير موجود ... لكن الخصائص تظهر في المستندات بشكل جيد. أعتقد أن السبب هو أن series.bullet
يمتد إلى plotOptions.bullet
الذي يحتوي على plotOptions.bullet.targetOptions
، لذا فإن series.bullet.targetOptions
يتحول إلى plotOptions.bullet.targetOptions
؟
تحرير: القليل من التقدم الليلة ، كان التحقق الصادق من القيمة الافتراضية هو تجاهل جميع القيم الحرفية false
، وتم إصلاح ذلك والكثير من الأشياء التي تم استنتاجها على أنها قيمة منطقية. غير متأكد من أن القيمة المنطقية هي النوع الصحيح للاستدلال عليه في بعض الأماكن. أتحقق أيضًا من values
للأنواع الحرفية (هذه المعلومات رائعة!). على أي حال يتم تحديث تفريغ الأنواع المفقودة .
أحرز بعض التقدم بعد التفكير في كيفية تمدد الشجرة للأشياء:
object
و array
و function
.Omit<>
وتمرير لإضافة extends
صريح لجميع الكائنات التي تحتوي على excludes
(باستخدام الطريقة المذكورة في النقطة الأولى) ، والتغيير مرة أخرى لاستخدام الواجهات مع جميع الخصائص الاختيارية. أعتقد أن هذا سوف ينجح ، طالما يمكننا التأكد من أن جميع العقارات ستكون اختيارية؟ هل هناك أي خصائص مطلوبة؟"memberof": "yaxis"
في tooltipValueFormat
doclet؟context
هي PlotLineOrBand
لكني لا أرى ذلك في مستندات الفئات ، هل هذه فئة فرعية من Series
؟plotOptions.series.states
له اسم من نوع doclet "plotOptions.series.states"
- هل هذا يعني شيئًا مميزًا؟aaronbeall هل لديك أي تقدم؟ لقد تعمقت أيضًا قليلاً في إنشاء الكتابة للحصول على مخططات عالية.
أحد العيوب الرئيسية هو أن tree.json
الذي تم إنشاؤه لا يحتوي على جميع أنواع المخططات العالية ، مثل الطرق الثابتة في مساحة اسم المخططات العالية. يوجد رمز 703 بعد تقليم الرمز الصحيح. ولكن بعد ذلك ، تبلغ رموز الإخراج داخل tree.json حوالي 100. تم تجاهل الكثير منها.
@ scott-ho لقد مر قليلاً لأنني تركت المشروع باستخدام Highcharts في العام الجديد ، لكنني أعود إليه الآن وسأعود إلى هذا المشروع قريبًا.
من آخر مشاركة لي ، انتقلت إلى مسار تحويل type
إلى interface
واستخدام extends
بدلاً من &
(كانت هذه استراتيجيتي لدعم tree.json
بشكل صحيح excludes
لحقول محددة) ، وواجهت مشاكل: لن يسمح TS لواجهة بتوسيع واجهة أخرى تشارك اسم حقل وهو نوع كائن لا يشارك على الأقل 1 خاصية. هذا مثال مجرد. نسيت الأمثلة الدقيقة لهذا الأمر ولكن كان هناك الكثير ، بسبب الطريقة tree.json
لتوسيع الكائنات بحرية (في بعض الحالات تجاوزت سلاسل الامتداد 5) واستبعاد الحقول بحرية في أي وقت. قادني هذا إلى الاعتقاد بأن أسلوبي السابق لاستخدام أنواع التقاطع &
قد يكون أفضل طريق. سينتج عن ذلك أساسًا أن بعض الخصائص "المستبعدة" لا تظهر فعليًا مستبعدة في تلميح النوع (لأنها مدمجة من شيء ممتد أعلى في الشجرة ولا يمكن حذفه من العقدة الحالية) ، لكن لا يمكنني فكر في طريقة أفضل للقيام بذلك. تتغلب المستندات على هذه المشكلة لأنها تعرض الخصائص من نقطة واحدة ، لكن من الناحية الهيكلية لا يمكننا وصف الأنواع بهذه الطريقة دون التخلي عن extends
وإنشاء عدد كبير من تعريفات الأنواع المكررة.
يوجد رمز 703 بعد تقليم الرمز الصحيح. ولكن بعد ذلك ، تبلغ رموز الإخراج داخل tree.json حوالي 100. تم تجاهل الكثير منها.
ما طريقة التقليم التي تشير إليها؟ كان هذا هو الجزء الأصعب للتعامل معه ...
نعم ، لقد لاحظت أيضًا أن الفئات / مساحات الأسماء ليست موصوفة في tree.json
(هذا في الأساس يصف خيارات التهيئة التعريفية كما أفهمها) ، لكن cvasseng قال إنها vanilla jsdoc3 لذا نأمل أن نتمكن من استخدام معيار محول لذلك.
يشار إلى pruning
من هذا السطر .
جميع عمليات جمع البيانات لـ tree.json
موجودة داخل طريقة publish
.
أعتقد أنه قد يكون هناك بعض إساءة استخدام jsdoc api بداخله.
يمكننا اكتشاف طريقة أفضل لإنشاء إصدار جديد tree.json
بناءً على الناتج الأصلي من jsdoc.
اليوم ، قضيت بعض الوقت لمعرفة ما يمثله tree.json
. ثم اكتشفت أخيرًا أن tree.json
يستضيف فقط أنواع خيارات الرسم البياني. انظر هنا https://api.highcharts.com/highcharts/.
يتم كتابة منطق التجميع والتوليد هنا - https://github.com/highcharts/highcharts/blob/master/tools/jsdoc/plugins/highcharts.jsdoc.js.
قد نحتاج إلى إنشاء نسخة كاملة من الأنواع بأنفسنا والقيام بشيء مشابه لـ https://github.com/englercj/tsd-jsdoc.
هل هناك أي وقت مقدر لهذا؟ التعريفات في DefinitelyTyped مروعة جدًا.
هل فكرت في التحدث إلى فريق TypeScript حول الميزات المفقودة التي تحتاجها؟ أنا متأكد من أنهم سيستمعون إلى احتياجات مشروع بحجم Highcharts ولديهم دورة إصدار سريعة إلى حد ما.
aaronbeall هل نظرت إلى أنواع الخرائط ؟
إليك ارتباط بإصلاح لمثالك
تضمين التغريدة
هل فكرت في التحدث إلى فريق TypeScript حول الميزات المفقودة التي تحتاجها؟
JannesMeyer لسوء الحظ ، لا توجد أجهزة ATM لـ ETA ، سيعود مشروعي بالتأكيد إلى الاستخدام المكثف لـ Highcharts ، لكن في الوقت الحالي أعمل على شيء آخر. أنا في الواقع أستخدم الأنواع المعينة (والأنواع الشرطية) وهي الطريقة التي يعمل بها Omit<>
لتمييز الأشياء عن بعضها البعض ... لكن التحديات التي تواجهني تتعلق أكثر بكيفية العمل على طريقة تعريف بنية بيانات Highcharts في شكل قابل للاستخدام ، تعريفات نوع كاملة مريحة. يبدو أنه يجب تحديد التعريفات بالحد الأدنى (أي عدم إعادة تعريف نفس الخاصية على كائنات مماثلة في كل مكان) ولكن دون فقدان أي شيء. وجود خيار يظهر في إكمال النوع الذي لا تستخدمه Highcharts في الواقع في سياق معين هو أقل مشكلة ثم فقدان شيء يجب أن يكون هناك. هناك أيضًا مشكلة نقص مخطط المستند الذي ينتج عنه أنواع object
أو any
... في مكان ما يجب على شخص ما كتابة الكتابة فيه ، لا يستطيع إنشاء النوع القيام بذلك نيابة عنك.
نعم ، هذا منطقي. يبدو أنه ربما يجب على فريق Highcharts أن يتبنى TypeScript أكثر قليلاً مما يفعل حاليًا. ربما يكون من الممكن إنشاء المستندات من تعريفات النوع بدلاً من إنشائها من jsdoc؟
JannesMeyer # 8307 في طريقه لإنشاء الأنواع الكاملة من Highcharts. المراجعة تتطلب. بمجرد دمج تحسين المستندات ، سيتم إصدار علاقات عامة أخرى لإنشاء الأنواع الكاملة تلقائيًا بناءً على تدوين jsdoc.
لقد كنت أتابع هذا المنشور ، وسيكون من المفيد حقًا أن يكون ملف الإعلان متاحًا.
لقد كنت أستخدم DefenitelyTyped لمشروعنا React / Typescript. ومع ذلك ، تعثرت في إمكانية الوصول. لم يدرك أن جزء إمكانية الوصول لن يعمل مع DefenitelyTyped. لقد اتصلت بفريق دعم Highcharts بخصوص مشكلتي ، لكن لم يحالفني الحظ حتى الآن.
في فريقنا ، نستخدم Highcharts / Highmaps بكثافة. لذلك ، استثمرنا فيه. يرجى التفكير في أولوية هذا المشروع.
شكرا لك مقدما!
أود فقط أن أبلغ أن هذه القضية أصبحت ذات أولوية قصوى.
انضم فريق Highcharts ( sophiebremer و oysteinmoseng ) في جلسة تصحيح الأخطاء معي وساعدني في حل هذه المشكلة عن طريق تحميل ملفات Js مباشرةً. إنني أقدر حقًا الوقت والحل الذي قدموه لإلغاء حظر لي في هذه اللحظة. تطلع إلى ملف إقرار TS باستخدام Highcharts كحل نهائي. :)
شكرًا sophiebremer لإعطاء هذا الأولوية. سيكون هذا مفيدًا جدًا للمشاريع التي تستخدم Typescript.
ملاحظة: لقد قمت بتحرير التعليق لتوفير سياق أفضل وأيضًا أشكر الأشخاص من فريق Highcharts.
نحن نستخدم Highstock بشكل مكثف في فريق كبير للواجهة الأمامية يعمل باستخدام الزاوية / الكتابة المطبوعة. سيكون رائعًا بالنسبة لنا أن يكون لدينا تعريفات مطبوعة ، اعتقدنا أن التعريفات من DefinitelyTyped كانت المرجع ، لكنها عفا عليها الزمن تمامًا بالنسبة لـ Highstock ..
هذه التعريفات المطبوعة هي حقًا حاجة كبيرة لنا!
أي ETA مرحب به :)
نحن نعمل الآن على الجودة ونحاول تقليل عدد الواجهات التي تم إنشاؤها في شجرة خيارات Highcharts. بعد ذلك سنبدأ مرحلة تجريبية عامة.
الوقت المقدر لوصولنا هو الربع الثالث من 2018 للنسخة التجريبية.
sophiebremer هذه أخبار رائعة! هل لديك منشئ DTS أم أنك تستخدم أداة تحويل موجودة؟
نحن نستخدم واحدة مخصصة. لقد جربنا نهج طلب السحب هذا https://github.com/highcharts/highcharts/pull/8307 باستخدام dts-dom بالأسفل ، لكن هذا لم ينجح بشكل جيد.
أي أخبار عن هذا؟ يبدو أن @types/highcharts
لم يعد يتم تحديثه.
ما زلنا نعمل على هذا الأمر بأولوية عالية. للأسف لا يمكنني نشر معاينة للإعلان في الوقت الحالي. لا تزال هناك أنواع تحتاج إلى التوحيد أو تحتاج إلى تقديم. سيكون "highcharts.d.ts" ملفًا ضخمًا يحتوي على أكثر من 200.000 سطر من الإعلانات والتعليقات.
sophiebremer كيف تنتج هذا الملف؟ يدويا؟
@ سكوت هو
على الرغم من أن ملفات التصريح يتم إنشاؤها تلقائيًا ، إلا أن إصلاح وتحديث المستندات في الكود المصدري يعد عملية يدوية.
مرحبا جميعا! قمت بنشر معاينة لإعلانات Highcharts في مستودعي الشخصي. يمكنك اختباره عن طريق npm i https://github.com/sophiebremer/highcharts-declarations-alpha.git
أو تنزيل الإعلان من https://github.com/sophiebremer/highcharts-declarations-alpha/blob/master/highcharts.d.ts ووضعه مباشرة في ./node_modules/highcharts/
. يرجى إخبارنا ، إذا كان الإعلان مناسبًا لك أو إذا كانت لديك مشاكل. شكرا لك!
مشاكل معروفة:
{ data: [0, 1, 2]} as Highcharts.SeriesLineOptions
لا يبدو أن دالات ChartEventsOptions مثل التحديد تأخذ معلمة دالة الحدث
زوجان من القضايا الأخرى التي وجدت
غير قادر على استيراد وحدات التصدير خارج الإنترنت. اضطررت إلى تغيير export = factory لتصدير المصنع الافتراضي واستخدامه كاستيراد افتراضي
وحدة التعليقات التوضيحية مفقودة
انقر فوق PlotSeriesEventsOptions بحاجة إلى تعديل كنقرة ؟: (e: PointerEventObject) => منطقية؛
شكرًا لك على التعليقات ، muperi !
بعض التعليقات حول مشاركتك الثانية:
لا يبدو أن دالات ChartEventsOptions مثل التحديد تأخذ معلمة دالة الحدث
الإصلاح جزء من highcharts / highcharts # 9110 وسيتم تضمينه في التحديث القادم من https://github.com/highcharts/highcharts-declarations-beta.
يُرجى إضافة المزيد من المشكلات مع ملفات الإقرار إلى هذا المستودع: https://github.com/highcharts/highcharts-declarations-beta.
شكرا لك.
التعليق الأكثر فائدة
أود فقط أن أبلغ أن هذه القضية أصبحت ذات أولوية قصوى.