मैं अपनी और अपनी पार्टी दोनों के लिए बहुत सारे पुस्तकालयों का उपयोग कर रहा हूं। मैं देख रहा हूँ कि "टाइपिंग" निर्देशिका में Jquery और WinRT के लिए कुछ हैं ... लेकिन वे कैसे बनाई जाती हैं?
मैं अपनी और अपनी पार्टी दोनों के लिए बहुत सारे पुस्तकालयों का उपयोग कर रहा हूं। मैं देख रहा हूँ कि "टाइपिंग" निर्देशिका में Jquery और WinRT के लिए कुछ हैं ... लेकिन वे कैसे बनाई जाती हैं?
जवाबों:
आपके लिए प्रश्न में पुस्तकालय के आधार पर कुछ विकल्प उपलब्ध हैं, यह कैसे लिखा जाता है, और आप किस स्तर की सटीकता की तलाश कर रहे हैं। आइए विकल्पों की समीक्षा करें, मोटे तौर पर वांछनीयता के अवरोही क्रम में।
हमेशा पहले निश्चित रूप से जाँच करें ( https://github.com/DefinitelyTyped/DefinitelyTyped ) पहले। यह वस्तुतः हजारों .d.ts फ़ाइलों से भरा एक सामुदायिक रेपो है और यह बहुत संभावना है कि आप जिस चीज का उपयोग कर रहे हैं वह पहले से ही है। आपको TypeSearch ( https://microsoft.github.io/TypeSearch/ ) भी जांचना चाहिए जो NPM- प्रकाशित .d.ts फ़ाइलों के लिए एक खोज इंजन है; यह निश्चित रूप से निश्चित रूप से की तुलना में थोड़ा अधिक परिभाषाएँ होगी। कुछ मॉड्यूल अपने एनपीएम वितरण के हिस्से के रूप में अपनी स्वयं की परिभाषाओं को भी शिपिंग कर रहे हैं, इसलिए यह भी देखें कि क्या अपना लिखने की कोशिश करने से पहले ऐसा है।
टाइपस्क्रिप्ट अब --allowJs
ध्वज का समर्थन करता है और .js फ़ाइलों में अधिक JS- आधारित इंफ़ेक्शन बना देगा। आप अपने संकलन में .js फ़ाइल सहित कोशिश कर सकते --allowJs
हैं कि यह देखने के लिए कि क्या यह आपको पर्याप्त प्रकार की जानकारी देता है। टाइपस्क्रिप्ट इन फ़ाइलों में ईएस 5-शैली की कक्षाओं और जेएसडीओसी टिप्पणियों जैसी चीजों को पहचानेंगे, लेकिन अगर पुस्तकालय खुद को एक अजीब तरीके से शुरू करता है, तो यह हो सकता है।
--allowJs
यदि --allowJs
आप सभ्य परिणाम दे दी है और आप एक बेहतर परिभाषा फ़ाइल अपने आप को, आप को जोड़ सकते हैं लिखना चाहते हैं --allowJs
के साथ --declaration
पुस्तकालय के प्रकार पर टाइपप्रति में "बेस्ट अनुमान" को देखने के लिए। यह आपको एक अच्छा शुरुआती बिंदु देगा, और हाथ से लिखी गई फ़ाइल के रूप में अच्छा हो सकता है अगर JSDoc टिप्पणियां अच्छी तरह से लिखी गई हैं और संकलक उन्हें खोजने में सक्षम था।
यदि --allowJs
काम नहीं किया, तो आप प्रारंभिक बिंदु प्राप्त करने के लिए dts-gen ( 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
चर देगा।
--declarations
दोनों को जनरेट करती है , जिसका मतलब है कि आपको केवल एक ही संकलन चलाने की आवश्यकता है। .js
.d.ts
--allowJs
--declaration
विकल्पों के साथ जोड़ा नहीं जा सकता (टाइपस्क्रिप्ट 1.8 और 2.0 में परीक्षण किया गया)। अगर मैं कोशिश करूँ, तो मुझे पता है:error TS5053: Option 'allowJs' cannot be specified with option 'declaration'
आप या तो उपयोग कर सकते हैं tsc --declaration fileName.ts
रयान की तरह का वर्णन करता है, या आप निर्दिष्ट कर सकते हैं declaration: true
के तहत compilerOptions
अपने में tsconfig.json
यह सोचते हैं आप पहले से ही एक मिला है tsconfig.json
अपनी परियोजना के तहत।
tsc --declaration test.ts
हूं Cannot find name...
कि मुझे उन प्रकारों के लिए त्रुटि मिले जो मैं के लिए एक घोषणा फ़ाइल बनाने की कोशिश कर रहा हूं :) तो मुझे उन्हें घोषित करने से पहले प्रकारों की आवश्यकता होगी?
declaration: true
अपनी tsconfig.json
फ़ाइल में जोड़ने का प्रयास कर सकते हैं ?
इससे निपटने का सबसे अच्छा तरीका (यदि एक घोषणा फ़ाइल निश्चित रूप से उपलब्ध नहीं है ) पूरी लाइब्रेरी के बजाय आपके द्वारा उपयोग की जाने वाली चीज़ों के लिए घोषणाएँ लिखना है। यह काम को बहुत कम कर देता है - और इसके अलावा संकलक लापता तरीकों के बारे में शिकायत करके मदद करने के लिए है।
जैसा कि रेयान कहते हैं, tsc संकलक में एक स्विच होता है --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
फ़ाइल के साथ समाप्त होता है जिसमें कई परिभाषाएं शामिल हैं।
अपनी खुद की लाइब्रेरी बनाते समय, आप (टाइपस्क्रिप्ट कंपाइलर) कमांड *.d.ts
का उपयोग करके फाइल बना सकते हैं tsc
जैसे: (यह मानते हुए कि आप अपनी लाइब्रेरी को dist/lib
फ़ोल्डर में बना रहे हैं)
tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
-d
( --declaration
): *.d.ts
फ़ाइलें उत्पन्न करता है--declarationDir dist/lib
: उत्पन्न घोषणा फ़ाइलों के लिए आउटपुट निर्देशिका।--declarationMap
: प्रत्येक संबंधित '.d.ts' फ़ाइल के लिए एक सोर्समैप बनाता है।--emitDeclarationOnly
: केवल '.d.ts' घोषणा फ़ाइलों का उत्सर्जन करें। (कोई संकलित JS)( सभी कमांड लाइन संकलक विकल्पों के लिए डॉक्स देखें )
या उदाहरण के लिए अपने में package.json
:
"scripts": {
"build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}
और फिर चलाएं: yarn build:types
(या npm run build:types
)
d.ts
सकता कि फ़ाइलों को कैसे उत्पन्न किया जाए और इंटरफेस का उपयोग करने में सक्षम हो। क्या आपके पास कोई उदाहरण है?
*.d.ts
फाइलों को उत्पन्न करेगी और उन्हें dist/lib
फ़ोल्डर में डाल देगी । आपको tsconfig.json
अपने प्रोजेक्ट के रूट में एक फ़ाइल की आवश्यकता है , लेकिन यह प्रोजेक्ट के लिए वैसे भी काम करने के लिए होना चाहिए।
मैं आपकी 3rd पार्टी JS लाइब्रेरीज़ की मौजूदा मैपिंग की तलाश करूँगा जो Script # या SharpKit का समर्थन करती है। इन C # से .js क्रॉस कंपाइलर्स के उपयोगकर्ताओं को अब आपके सामने आने वाली समस्या का सामना करना पड़ा होगा और हो सकता है कि आपके तीसरे पक्ष के काम को स्कैन करने और कंकाल C # कक्षाओं में परिवर्तित करने के लिए एक खुला स्रोत कार्यक्रम प्रकाशित किया हो। यदि ऐसा है तो C # की जगह टाइपस्क्रिप्ट बनाने के लिए स्कैनर प्रोग्राम को हैक करें।
टाइप करने के लिए, टाइपस्क्रिप्ट परिभाषाओं में आपकी 3 पार्टी के लिए सी # सार्वजनिक इंटरफ़ेस का अनुवाद करना स्रोत जावास्क्रिप्ट को पढ़ने से ऐसा करने की तुलना में सरल हो सकता है।
मेरी विशेष रुचि स्नेचा के एक्सटीजेएस आरआईए फ्रेमवर्क है और मुझे पता है कि स्क्रिप्ट # या शार्पकिट के लिए सी # व्याख्या उत्पन्न करने के लिए प्रकाशित परियोजनाएं हैं।