আপনি কীভাবে বিদ্যমান জাভাস্ক্রিপ্ট লাইব্রেরি থেকে .d.ts "টাইপিংস" সংজ্ঞা ফাইল তৈরি করবেন?


192

আমি আমার নিজস্ব এবং তৃতীয় পক্ষ উভয় গ্রন্থাগার ব্যবহার করছি। আমি দেখতে পাচ্ছি "টাইপিংস" ডিরেক্টরিটিতে জ্যাকারি এবং উইনআরটি-র জন্য কিছু রয়েছে ... তবে সেগুলি কীভাবে তৈরি করা হয়?

উত্তর:


232

আপনার কাছে প্রশ্নাবলির গ্রন্থাগারের উপর নির্ভর করে কয়েকটি বিকল্প উপলব্ধ রয়েছে, এটি কীভাবে লেখা এবং আপনি কী স্তরের নির্ভুলতার সন্ধান করছেন। আসুন অপশনগুলির পর্যালোচনা করা যাক মোটামুটি আকাঙ্ক্ষার ক্রমবর্ধমান ক্রমে।

সম্ভবত এটি ইতিমধ্যে বিদ্যমান

সর্বদা সর্বদা সংজ্ঞাযুক্ত টাইপযুক্ত ( https://github.com/DefinitelyType // DefinitelyType ) চেক করুন । এটি একটি সম্প্রদায়ের রেপো যা আক্ষরিক হাজার .d.ts ফাইলগুলিতে পূর্ণ এবং সম্ভবত আপনি যে জিনিসটি ব্যবহার করছেন সেটি ইতিমধ্যে রয়েছে। আপনার টাইপসন্ধান ( https://microsoft.github.io/TypeSearch/ ) যাচাই করা উচিত যা এনপিএম-প্রকাশিত .d.ts ফাইলগুলির জন্য একটি অনুসন্ধান ইঞ্জিন; এটির ডেফিনিটি টাইপযুক্তের চেয়ে কিছুটা বেশি সংজ্ঞা থাকবে। কয়েকটি মডিউলগুলি তাদের এনপিএম বিতরণের অংশ হিসাবে তাদের নিজস্ব সংজ্ঞাও শিপিং করছে, তাই আপনার নিজের লেখার চেষ্টা করার আগে যদি এটি তেমন হয় তবে তাও দেখুন।

হতে পারে আপনার দরকার নেই

টাইপস্ক্রিপ্ট এখন --allowJsপতাকাটিকে সমর্থন করে এবং .js ফাইলে আরও জেএস-ভিত্তিক সূচনা তৈরি করবে। আপনি আপনার সংকলনের মধ্যে .js ফাইলটি --allowJsসেটিং সহ চেষ্টা করে দেখতে পারেন যে এটি আপনাকে যথেষ্ট ভাল টাইপের তথ্য দেয় কিনা। টাইপস্ক্রিপ্ট এই ফাইলগুলিতে ইএস 5-স্টাইলের ক্লাস এবং জেএসডোক মন্তব্যের মতো জিনিসগুলিকে স্বীকৃতি দেবে, তবে লাইব্রেরিটি যদি এক অদ্ভুত উপায়ে নিজেকে আরম্ভ করে তবে তা ছড়িয়ে পড়ে।

দিয়ে শুরু করুন --allowJs

যদি --allowJsআপনি শালীন ফল পাওয়া যায় এবং আপনি একটি ভাল সংজ্ঞা ফাইল নিজেকে, আপনি একত্রিত করতে পারেন লিখতে চান --allowJsসঙ্গে --declarationলাইব্রেরির ধরনের এ টাইপ করা বিষয় "বেস্ট অনুমান" দেখতে। এটি আপনাকে একটি শালীন সূচনা পয়েন্ট দেবে, এবং জাসডোকের মন্তব্যগুলি ভালভাবে লিখিত থাকলে এবং সংকলক সেগুলি সন্ধান করতে সক্ষম হলে হস্ত-লিখিত ফাইলের মতোই ভাল।

ডিটিএস-জেন দিয়ে শুরু করুন

যদি --allowJsকাজ না করে তবে আপনি একটি সূচনা পয়েন্ট পেতে dts-gen ( https://github.com/Mic Microsoft/dts-gen ) ব্যবহার করতে চাইতে পারেন । এই সরঞ্জামটি সমস্ত উপলব্ধ বৈশিষ্ট্যকে সঠিকভাবে গণনা করতে অবজেক্টের রানটাইম আকার ব্যবহার করে। প্লাস সাইডে এটি খুব নির্ভুল হতে থাকে, তবে সরঞ্জামটি অতিরিক্ত ধরণের পপুলেশন করতে JSDoc মন্তব্যগুলি স্ক্র্যাপিং সমর্থন করে না। আপনি এভাবে চালান:

npm install -g dts-gen
dts-gen -m <your-module>

এটি your-module.d.tsবর্তমান ফোল্ডারে উত্পন্ন করবে ।

স্নুজ বোতামটি হিট করুন

আপনি যদি কেবল এটি সমস্ত পরে করতে চান এবং কিছুক্ষণের জন্য টাইপ ছাড়াই যান তবে টাইপস্ক্রিপ্ট ২.০ এ আপনি এখন লিখতে পারেন

declare module "foo";

আপনি দেওয়া হবে ধরনের সঙ্গে মডিউল । আপনার যদি গ্লোবাল থাকে তবে আপনি পরে ডিল করতে চান, কেবল লিখুনimport"foo"any

declare const foo: any;

যা আপনাকে একটি fooপরিবর্তনশীল দেবে।


25
ওচ ... এটি অনেক ক্ষেত্রে প্রবেশের ক্ষেত্রে গুরুত্বপূর্ণ বাধা হয়ে দাঁড়াবে। এমন কোনও সরঞ্জাম পাওয়া ভাল লাগবে যা টাইপ অনুক্রমের ভিত্তিতে কমপক্ষে "সেরা অনুমানগুলি" আউটপুট দিতে পারে। যদিও এগুলি সর্বোত্তম নাও হতে পারে তবে এগুলি অন্তত সময়ের সাথে সাথে সুর করা যেতে পারে।
হটরোডমোনকি

7
+1 - আরও সুসংবাদ: ফাইল এবং ফাইল --declarationsউভয়ই উত্পন্ন করে , যার অর্থ আপনার কেবলমাত্র একটি একটি সংকলন চালানো দরকার। .js.d.ts
ফেন্টন

67
জনপ্রিয় লাইব্রেরিগুলির জন্য উচ্চ-মানের সংজ্ঞাগুলির একটি সংকলন github.com/borisyankov/DefinitelyType
বরিস

10
টাইপস্ক্রিপ্টে ইতিমধ্যে বিদ্যমান ইন্টেলিজেন্সের চেয়ে 'সেরা অনুমান' সরঞ্জামটি আর ভাল হবে না। ধরণের সংজ্ঞাগুলির সুবিধাটি 'অনুমান' করার চেয়ে সংকলককে আরও বেশি তথ্য সরবরাহ করা।
বরিস ইয়াঙ্কভ

12
--allowJs--declarationবিকল্পগুলির সাথে একত্রিত করা যায় না (টাইপস্ক্রিপ্ট 1.8 এবং 2.0 তে পরীক্ষা করা)। আমি চেষ্টা করলে, আমি পেয়েছি:error TS5053: Option 'allowJs' cannot be specified with option 'declaration'
অ্যালেক্সি

52

হয় আপনি ব্যবহার করতে পারেন tsc --declaration fileName.tsরায়ান মত বর্ণনা করে, অথবা আপনি নির্দিষ্ট করতে পারেন declaration: trueঅধীনে compilerOptionsআপনার tsconfig.jsonঅভিমানী যদি আপনি ইতিমধ্যেই একটি ছিল করেছি tsconfig.jsonআপনার প্রকল্পের অধীনে।


4
আপনি যদি ভাগ করতে চান এমন একটি কৌনিক 2 মডিউল (গুলি) বিকাশ করছেন তবে এটি সেরা উত্তর।
ডারসি

যদি আমি চেষ্টা tsc --declaration test.tsকরি তবে Cannot find name...যে ধরণের জন্য আমি একটি ডিকোলেশন ফাইল তৈরি করতে চাইছি তার জন্য ত্রুটিটি পেয়েছি :) সুতরাং আমি ধরণেরগুলি প্রকাশ করার আগে সেগুলির আমার কী প্রয়োজন?
কোকোডোকো

2
@ কোকোডোকো, আপনি কি declaration: trueআপনার tsconfig.jsonফাইলটিতে যুক্ত করার চেষ্টা করতে পারেন ?
জয়কান

ধন্যবাদ, আমি কেবল * .ts থেকে * .d.ts তৈরি করতে চাইছিলাম।
vintproykt

16

এটির সাথে মোকাবিলা করার সর্বোত্তম উপায় (যদি কোনও ডিক্লেয়ারেশন ফাইল ডেফিনিটি টাইপডে পাওয়া না যায় ) তবে সম্পূর্ণ লাইব্রেরির পরিবর্তে কেবলমাত্র আপনি যে জিনিসগুলি ব্যবহার করেন সেগুলির জন্য ডকোলেশন লিখতে হয়। এটি কাজটি অনেক হ্রাস করে - এবং অতিরিক্তভাবে সংকলকটি অনুপস্থিত পদ্ধতিগুলির বিষয়ে অভিযোগ করে সহায়তা করার জন্য রয়েছে।


15

রায়ান যেমন বলেছে, টিএসসি সংকলকটিতে একটি সুইচ রয়েছে --declarationযা একটি .d.tsফাইল থেকে একটি .tsফাইল উত্পন্ন করে । আরও মনে রাখবেন যে (বাগগুলি ব্যতীত) টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্ট সংকলন করতে সক্ষম হবেন বলে মনে করা হচ্ছে, সুতরাং আপনি বিদ্যমান জাভাস্ক্রিপ্ট কোডটি টিএসসি সংকলককে পাস করতে পারেন।


1
বর্তমানে * .js ফাইলগুলিকে টিএসএসে পাস করার ফলে একটি ত্রুটি "ফাইল পড়ার সময় ত্রুটি" কৌণিক-রিসোর্স.জেএস "উত্পন্ন হয়েছে: ফাইল পাওয়া যায় নি"। তাই আপনাকে টিএসএস ব্যবহার করতে সক্ষম হতে স্পষ্টভাবে * .js ফাইলগুলি * .ts এ পুনরায় নামকরণ করতে হবে। : - আরো বিস্তারিত জানার জন্য এই সমস্যা দেখুন আমি angularjs এই ব্যবহার করার চেষ্টা typescript.codeplex.com/workitem/26
জেমস স্ট্র্যাচান

3
আমি যা বলতে পারি তা থেকে, টিএসসি কোনও বৈধ জাভাস্ক্রিপ্ট সংকলন করতে পারে, তবে এটি বৈধ টাইপসক্রিপ্ট নয় (সংকলন সতর্কতা দেয়) তবে --declations পতাকাটি একটি .d.ts ফাইল আউটপুট দেয় না, যদি না আপনার লাইব্রেরি টাইপস্ক্রিপ্টে না লেখা থাকে তবে এখনও ম্যানুয়ালি ঘোষণার ফাইলটি তৈরি করতে হবে।
Agradl


3

এখানে এমন কিছু পাওয়ারশেল যা একটি একক টাইপসক্রিপ্ট সংজ্ঞা ফাইলটি একটি লাইব্রেরি তৈরি *.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ফাইলের সাথে শেষ হয় যার মধ্যে অনেকগুলি সংজ্ঞা রয়েছে।


2
দ্বিতীয় পদক্ষেপ, গেট-চাইল্ড আইটেম | foreach {tsc - ডিক্লেয়ারেশন $ _। নাম} কাজ করেছে (নিখোঁজ
বিবৃতি পরম

3

আপনার নিজের লাইব্রেরি তৈরি করার সময়, আপনি (টাইপস্ক্রিপ্ট সংকলক) কমান্ডটি *.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' ঘোষণার ফাইলগুলি নির্গত করে। (সংকলিত জেএস নেই)

( সমস্ত কমান্ড লাইন সংকলক বিকল্পগুলির জন্য ডক্স দেখুন )

বা উদাহরণস্বরূপ আপনার 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আপনার প্রকল্পের মূলে আপনার কোনও ফাইলের দরকার আছে , তবে প্রকল্পটি যেভাবেই হোক কাজ করার জন্য সেখানে থাকা উচিত।
MagikMaker

আমি তাদের ব্যবহার করতে অক্ষম, একবার উন্মুক্ত। আমার কাছে নিম্নলিখিত পোস্টটি রয়েছে স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি /59742688 আপনি যদি এটি কাজ করতে পারেন?
ড্যানোসরে

2

আমি আপনার 3 য় পক্ষের জেএস লাইব্রেরির একটি বিদ্যমান ম্যাপিং সন্ধান করব যা স্ক্রিপ্ট # বা শার্পকিট সমর্থন করে। এই সি # টু .জেএস ক্রস সংকলকগুলির ব্যবহারকারীরা এখন আপনার যে সমস্যার মুখোমুখি হবেন এবং তারা আপনার তৃতীয় পক্ষের লিবি স্ক্যান করতে এবং কঙ্কাল সি # শ্রেণিতে রূপান্তর করতে একটি মুক্ত উত্স প্রোগ্রাম প্রকাশ করেছে। যদি তাই হয় তবে স্ক্যানার প্রোগ্রামটি সি # এর জায়গায় টাইপস্ক্রিপ্ট তৈরি করতে হ্যাক করুন।

এটি ব্যর্থ হয়ে, আপনার তৃতীয় পক্ষের লাইবের জন্য সিএস পাবলিক ইন্টারফেসটি টাইপস্ক্রিপ্ট সংজ্ঞায় অনুবাদ করা সোর্স জাভাস্ক্রিপ্ট পড়ে এটি করার চেয়ে সহজ হতে পারে।

আমার বিশেষ আগ্রহ সেঞ্চার এক্সটجيএস আরআইএ কাঠামো এবং আমি জানি স্ক্রিপ্ট # বা শার্পকিটের জন্য সি # ব্যাখ্যা জেনারেট করার জন্য প্রকল্পগুলি প্রকাশিত হয়েছে


এফওয়াইআই: আমি সবেমাত্র আমার প্রথম টাইপস্ক্রিপ্ট সংজ্ঞা ফাইলটি সেনচা / এক্সট্রিজএসের জন্য তৈরি করেছি: github.com/andremussche/extjsTypescript/blob/master/jsondocs/…
এন্ড্রে

আরে উটের কেস, আমি টাইপস্ক্রিপ্ট সহ এক্সট্রিজ ব্যবহার করার জন্য একটি ব্লগ রেখেছি: blorkfish.wordpress.com/2013/01/28/ using
extjs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.