मैं पुस्तकालयों का एक बहुत दोनों मेरे अपने और 3 पार्टी का उपयोग कर रहा हूँ। मैं देख रहा हूँ typings निर्देशिका jQuery और WinRT के लिए कुछ होता है ... लेकिन वे कैसे बनाया जाता है?
यदि आप एक .d.ts "typings" किसी मौजूदा JavaScript लाइब्रेरी से परिभाषा फ़ाइल कैसे बना सकता हूं?
वहाँ आप प्रश्न में पुस्तकालय के आधार पर, यह कैसे लिखा है के लिए कुछ विकल्प उपलब्ध है, और सटीकता का स्तर क्या आप देख रहे हैं कर रहे हैं। के विकल्पों की समीक्षा, मोटे तौर पर वांछनीयता के अवरोही क्रम में करते हैं।
हो सकता है कि वह पहले से मौजूद
हमेशा (DefinitelyTyped जाँच https://github.com/DefinitelyTyped/DefinitelyTyped ) पहले। यह एक समुदाय सचमुच .d.ts फ़ाइलों के हजारों से भरा रेपो है और यह बात आप उपयोग कर रहे पहले से ही वहाँ बहुत संभावना है। आप यह भी जाँच करनी चाहिए TypeSearch ( https://microsoft.github.io/TypeSearch/ ) जो NPM प्रकाशित .d.ts फ़ाइलों के लिए एक खोज इंजन है; इस DefinitelyTyped तुलना में थोड़ा अधिक परिभाषाओं होगा। कुछ मॉड्यूल भी अपने NPM वितरण के भाग के रूप में अपनी परिभाषाओं शिपिंग रहे हैं, इसलिए यह भी देखना है कि अगर अपने खुद के लिखने के लिए प्रयास करने से पहले मामला है।
हो सकता है कि आप भी आवश्यकता नहीं है
टाइपप्रति अब समर्थन करता है, --allowJsझंडा और .js फ़ाइलों में अधिक जेएस आधारित अनुमान कर देगा। आप के साथ अपने संकलन में .js फ़ाइल सहित कोशिश कर सकते हैं --allowJs, तो यह आपके काफी अच्छा प्रकार जानकारी देता है देखने के लिए सेटिंग। टाइपप्रति ES5 शैली वर्गों और इन फ़ाइलों में JSDoc टिप्पणियां जैसी चीजों को पहचान लेगा, लेकिन ऊपर फिसल गया हो सकता है अगर पुस्तकालय एक अजीब तरह से खुद initializes।
साथ शुरू करने के --allowJs
यदि --allowJsआप सभ्य परिणाम दे दी है और आप एक बेहतर परिभाषा अपने आप को फाइल लिखने के लिए चाहते हैं, आप को जोड़ सकते हैं --allowJsके साथ --declarationपुस्तकालय के प्रकार पर टाइपप्रति में "बेस्ट अनुमान" को देखने के लिए। यह आपको एक सभ्य प्रारंभिक बिंदु दे देंगे, और एक हाथ से लिखी फ़ाइल के रूप में रूप में अच्छा हो सकता है अगर JSDoc टिप्पणी अच्छी तरह से लिखा है और संकलक उन्हें खोजने के लिए सक्षम था।
साथ डीटीएस पीढ़ी शुरू करने के
अगर --allowJsकाम नहीं किया है, तो आप डीटीएस पीढ़ी (उपयोग करने के लिए चाहते हो सकता है https://github.com/Microsoft/dts-gen ) एक प्रारंभिक बिंदु प्राप्त करने के लिए। यह उपकरण वस्तु के क्रम आकार का उपयोग करता है सही ढंग से सभी उपलब्ध गुण की गणना करने में। प्लस तरफ यह बहुत ही सटीक हो जाता है, लेकिन उपकरण अभी तक स्क्रैप JSDoc टिप्पणियां अतिरिक्त प्रकार को भरने के लिए समर्थन नहीं करता। तुम इतनी तरह इस चलाएँ:
npm install -g dts-gen
dts-gen -m <your-module>
यह उत्पन्न होगा your-module.d.tsवर्तमान फ़ोल्डर में।
याद दिलाएं बटन मारो
तुम सिर्फ यह सब बाद में करते हैं और थोड़ी देर के लिए प्रकार के बिना जाना चाहते हैं, टाइपप्रति 2.0 में आप अब लिख सकते हैं
declare module "foo";
जो आप करने देगा प्रकार के साथ मॉड्यूल । आप है एक वैश्विक आप बाद में से निपटने के लिए चाहते हैं, तो बस लिखनाimport"foo"any
declare const foo: any;
जो आपको एक दे देंगे fooचर।
आप उपयोग कर सकते हैं या तो tsc --declaration fileName.tsरयान की तरह का वर्णन करता है, या आप निर्दिष्ट कर सकते हैं declaration: trueके तहत compilerOptionsअपने में tsconfig.jsonयह सोचते हैं आप पहले से ही एक मिला है tsconfig.jsonअपनी परियोजना के तहत।
इस से निपटने के लिए (यदि एक घोषणा फ़ाइल पर उपलब्ध नहीं है सबसे अच्छा तरीका है DefinitelyTyped ) केवल बातें आप पूरी लाइब्रेरी के बजाय का उपयोग के लिए घोषणाओं लिखने के लिए है। इस काम के लिए एक बहुत कम कर देता है - और साथ ही संकलक लापता तरीकों के बारे में शिकायत से मदद करने के लिए नहीं है।
रयान कहते हैं, टीएससी संकलक एक स्विच है --declarationजो एक उत्पन्न करता है .d.tsएक से फ़ाइल .tsफ़ाइल। यह भी ध्यान रखें कि (छोड़कर कीड़े) टाइपप्रति तो आप मौजूदा tsc संकलक करने के लिए जावास्क्रिप्ट कोड पारित कर सकते हैं, जावास्क्रिप्ट संकलित करने के लिए सक्षम होने के लिए माना जाता है।
में वर्णित के रूप http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript 00:33:52 पर वे एक उपकरण में WebIDL और WinRT मेटाडाटा कन्वर्ट करने के लिए का निर्माण किया था टाइपप्रति d.ts
यहाँ कुछ PowerShell है कि एक ही टाइपप्रति परिभाषा फ़ाइल एक पुस्तकालय जो एक से अधिक शामिल है बनाता है *.jsआधुनिक जावास्क्रिप्ट के साथ फ़ाइलें।
सबसे पहले, करने के लिए सभी एक्सटेंशन को बदलने .ts।
Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }
दूसरा, परिभाषा फ़ाइलें उत्पन्न करने के लिए टाइपप्रति संकलक का उपयोग करें। वहाँ संकलक त्रुटियों की एक गुच्छा होगा, लेकिन हम उन अनदेखा कर सकते हैं।
Get-ChildItem | foreach { tsc $_.Name }
अंत में, सभी गठबंधन *.d.tsमें फ़ाइलें index.d.ts, को हटाने के importबयान और हटाने के defaultप्रत्येक निर्यात बयान से।
Remove-Item index.d.ts;
Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
foreach { Get-Content $_ } | `
where { !$_.ToString().StartsWith("import") } | `
foreach { $_.Replace("export default", "export") } | `
foreach { Add-Content index.d.ts $_ }
यह एक एकल, प्रयोग करने योग्य के साथ समाप्त होता index.d.tsफ़ाइल कि परिभाषाओं के कई शामिल हैं।
मुझे लगता है कि समर्थन स्क्रिप्ट # या SharpKit अपने 3 पार्टी जे एस पुस्तकालयों में से एक मौजूदा मानचित्रण के लिए विचार करेंगे। के इन सी # उपयोगकर्ता पार compilers .js लिए समस्या अब आप का सामना सामना करना पड़ा है जाएगा और अपने 3 पार्टी lib स्कैन और कंकाल सी # वर्गों में परिवर्तित करने के लिए एक खुला स्रोत कार्यक्रम प्रकाशित हो सकता है। इसलिए स्कैनर प्रोग्राम सी # के स्थान पर टाइपप्रति उत्पन्न करने के लिए हैक हैं।
विफल रहने कि, टाइपप्रति परिभाषाओं में अपने 3 पार्टी lib के लिए एक सी # सार्वजनिक इंटरफ़ेस का अनुवाद स्रोत जावास्क्रिप्ट को पढ़ कर ही कर से अधिक आसान हो सकता है।
मेरे विशेष रुचि Sencha के ExtJS रिया ढांचा है और मैं वहाँ गई परियोजनाओं स्क्रिप्ट # या SharpKit के लिए एक सी # व्याख्या उत्पन्न करने के लिए प्रकाशित किया है पता
जब अपने खुद के पुस्तकालय बनाते समय, आप बना सकते हैं कर सकते हैं *.d.tsका उपयोग करके फ़ाइलें tsc(टाइपप्रति संकलक) आदेश की तरह तो: (यह मानते हुए आप के लिए अपने पुस्तकालय का निर्माण कर रहे dist/libफ़ोल्डर)
tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
-d(--declaration): उत्पन्न*.d.tsफ़ाइलों--declarationDir dist/lib: उत्पन्न घोषणा फ़ाइलों के लिए आउटपुट निर्देशिका।--declarationMap: प्रत्येक इसी '.d.ts' फ़ाइल के लिए कोई sourcemap उत्पन्न करता है।--emitDeclarationOnly: केवल फेंकना '.d.ts' घोषणा फ़ाइलें। (कोई संकलित जे एस)
(देखें डॉक्स सभी कमांड लाइन संकलक विकल्प के लिए)
या अपने में उदाहरण के लिए package.json:
"scripts": {
"build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}
और उसके बाद चलाएँ: yarn build:types(या npm run build:types)













