জাভাস্ক্রিপ্ট ফাইলগুলি টাইপস্ক্রিপ্টে রূপান্তর করার কোনও সরঞ্জাম আছে [বন্ধ]


133

এখন টাইপস্ক্রিপ্ট বেরিয়ে এসেছিল, এটি আমার জন্য একটি উত্তেজনাপূর্ণ খবর, তবে কীভাবে আমি বিদ্যমান সমস্ত জাভাস্ক্রিপ্ট ফাইলগুলি টাইপস্ক্রিপ্টে রূপান্তর করতে পারি।


3
আপনার সমস্ত জাভাস্ক্রিপ্ট ফাইলগুলি ইতিমধ্যে টাইপস্ক্রিপ্ট ফাইল কারণ টাইপসক্রিপ্ট জাভাস্ক্রিপ্টের সুপারসেট।
বেনজামিন গ্রুয়েনবাউম

6
এটি অফ-টীকের বিপরীত, একটি প্রোগ্রামিং ভাষা থেকে অন্যটিতে রূপান্তর করা মোটে একটি প্রোগ্রামিং প্রশ্ন।
ইভান ক্যাসেলেলানোস

2
@ টনি_হেনরিচ আচ্ছা তবে এটি "অফটপিক হিসাবে বন্ধ" এর পরিবর্তে সেখানে স্থানান্তরিত হওয়া উচিত ছিল, এবং বিটিডব্লিউ এই জাতীয় সাইটের সফ্টওয়্যার ইঞ্জিনিয়ারদের উদ্দেশ্যে সফ্টওয়্যার প্রস্তাবনার জন্য একটি পরিষ্কার বিভাগ থাকতে হবে।
ইভান ক্যাসেলেলানোস

3
@ টনি_হেনরিচ এটিকে এভাবে রাখুন: "জাভাস্ক্রিপ্টকে টাইপস্ক্রিপ্টে রূপান্তর করুন" এর জন্য এটি ইন্টারনেটে শীর্ষ ফলাফল এবং আপনি যা করতে পারেন তার সেরা উত্তরটি পরবর্তী উত্তরগুলি থেকে বন্ধ করে এটিকে বিষয়টিকে অফ-টপিক বলছেন? আমি মনে করি যে এই জাতীয় সংকীর্ণ চিন্তাভাবনা এই সাইটের মৃত্যু হবে।
ইভান ক্যাসেলেলানোস

5
হাস্যকর যে বিষয়টিকে বন্ধ করে দেওয়া হয়েছিল।
ভরাল

উত্তর:


112

আমি ভয় করি এটি খুব সমস্যাযুক্ত হবে। টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের একটি সুপারসেট । এর দ্বারা বোঝা যায় যে সমস্ত বৈধ জাভাস্ক্রিপ্ট কোডটিও বৈধ টাইপস্ক্রিপ্ট কোড। যা ঠিক ভুল। নিম্নলিখিত কোডটি জাভাস্ক্রিপ্টে সঠিক, তবে টাইপস্ক্রিপ্টে একটি ত্রুটি তৈরি করে:

var data={x:5, y:6};
data.z=5;

আপনি "পরিবেষ্টনকারী" হিসাবে ডেটা ঘোষণা করে জাভাস্ক্রিপ্টের গতিশীল আচরণ পেতে পারেন

var data:any={x:5, y:6};
data.z=5;

এখন এটি টাইপস্ক্রিপ্টেও কাজ করবে। তবুও আপনি .js ফাইলের এক্সটেনশনটি .ts এ পরিবর্তন করতে পারেন এবং এই ফাইলটি টাইপস্ক্রিপ্ট সংকলকটিতে পাস করতে পারেন। এটি আমাকে সত্যিই বিভ্রান্ত করেছিল এবং আমি ফ্রাইনেডে টাইপস্ক্রিপ্ট আইআরসি চ্যানেলে প্রশ্নটি জিজ্ঞাসা করি। দেখা গেল যে টাইপসক্রিপ্ট সংকলক বৈধ জাভাস্ক্রিপ্টের জন্য এর ইনপুটটি পরীক্ষা করে এবং কিছু খুঁজে পেলে কিছুই করে না। স্বজ্ঞাতভাবে এটি ভাল শোনাচ্ছে। কেবলমাত্র ফাইল এক্সটেনশানগুলি আপডেট করে আপনি আপনার সমস্ত জাভাস্ক্রিপ্টকে টাইপস্ক্রিপ্টে "রূপান্তর" করতে সক্ষম হবেন এবং যেতে ভাল হবেন। দুর্ভাগ্যক্রমে এটি প্রত্যাশার মতো কাজ করে না। ধরে নেওয়া যাক আপনার এই কোডটি পেয়েছে:

var func=function(n){alert(n)};

var data={x:5};
data.z=6;

সম্পাদনা: আমি কেবল এটি সংকলন করার চেষ্টা করেছি এবং এটি কার্যকর হয় না। আমি দুঃখিত, আমার মনে হয়েছে ভুল হয়েছে: টাইপস্ক্রিপ্ট সংকলক এমনকি খাঁটি জাভাস্ক্রিপ্ট গ্রহণ করে না। আমি কী ভুল হয়েছে তা জানার চেষ্টা করব।

আপনি ফাইল এক্সটেনশনটি .ts এ পরিবর্তন করেছেন এবং আপনার অন্য কোডটিতে ফাংশন ফানক ব্যবহার করেছেন। প্রথমে সবকিছু ঠিকঠাক মনে হলেও তারপরে একটি কুৎসিত বাগ উঠে আসে। আপনি স্থির করেন যে কিছু স্থির ধরণের চেকিং সম্ভবত আপনাকে সহায়তা করবে এবং আপনি কোডটি এতে পরিবর্তন করবেন:

var func=function(n:string){alert(n)};

var data={x:5};
data.z=6;

তবে এখন এটি আর বৈধ জাভাস্ক্রিপ্ট কোড নয় এবং সংকলকটি প্রচুর ত্রুটি বার্তা উত্পন্ন করবে। সব তথ্য পরে কোনও সদস্য "z" নেই। ... এই আচরণটি এড়ানো যেত যদি ডিফল্ট ধরণটি সর্বদা "যে কোনও" থাকে তবে টাইপ অনুমিতিটি সম্পূর্ণ অকেজো।

তাহলে আপনি এই সমস্যাটি কীভাবে সমাধান করবেন? উত্তর: ঘোষণাপত্র ফাইল। আপনি প্রকল্পে আপনার জাভাস্ক্রিপ্ট কোডটি "যেমন আছে" ব্যবহার করতে পারেন এবং কয়েকটি .d.ts ফাইলের সাহায্যে স্থির প্রকারের পরীক্ষা করতে পারেন। তারা জাভাস্ক্রিপ্ট ফাইলে কী কী ভেরিয়েবল, পদ্ধতি এবং "ক্লাস" ঘোষিত হয় সেগুলি সংকলককে জানিয়ে দেয়, তার প্রকারগুলি সহ। অতএব তারা সংকলন-টাইপ ধরণের চেকিং এবং চমত্কার বুদ্ধিমানের জন্য অনুমতি দেয়। আমার উদাহরণের জন্য একটি .d.ts ফাইল হবে

declare var data:any;
declare function func(n:string);

এটি "myjsfile.d.ts" হিসাবে সংরক্ষণ করুন এবং এর সাথে টাইপস্ক্রিপ্টে আমদানি করুন

///<reference path="myjsfile.d.ts"/>

কম্পাইল করা টাইপস্ক্রিপ্টের উপরে আপনার এইচটিএমএল ফাইলে জাভাস্ক্রিপ্ট স্ক্রিপ্ট অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন। এখানে একটি আকর্ষণীয় লিঙ্ক । আপনি "জাভাস্ক্রিপ্টকে টাইপস্ক্রিপ্টে রূপান্তর" বিভাগে আগ্রহী হতে পারেন।


57
সমস্ত বৈধ জেএস বৈধ টিএস নয় তা নির্দেশ করার জন্য +1।
কেন স্মিথ

14
আসলে, আপনার পোস্ট করা সমস্ত জাভাস্ক্রিপ্ট স্নিপেটগুলি বৈধ টাইপ স্ক্রিপ্ট। আপনাকে কেবল --noImplictAny ইত্যাদি ইত্যাদির মতো কিছু সংকলক সুইচ বন্ধ করতে হবে তবে এগুলি অবশেষে চালু করা এবং যেখানে প্রয়োজন
তেমন

ধন্যবাদ. যখন আমি লোকদের বলি যে টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের সুপারসেট নয়, আমি যে উদাহরণই দিই না কেন। অবশেষে লোকেরা যুক্তি ছেড়ে দেয় যখন আমি তাদের কেন দেখায় এবং তারপরে তারা পরের সপ্তাহে ঠিক একইভাবে তর্ক করে যেন পুডিংয়ের প্রমাণটি ভুলে যায়। " সমস্ত বৈধ জাভাস্ক্রিপ্ট কোডও বৈধ টাইপস্ক্রিপ্ট কোড ... ঠিক ভুল " - এলএইচকে
কোডি

3
টাইপসক্রিপ্টটি জাভাস্ক্রিপ্টে টাইপস্ক্রিপ্ট "ত্রুটি" সত্ত্বেও সংকলনের অনুমতি দেয় (টাইপস্ক্রিপ্টের বর্তমান ডেমো সংস্করণে এই উত্তরটিতে সমস্ত জাভাস্ক্রিপ্ট উদাহরণ সংকলনের কোনও সমস্যা নেই), এটি একরকম সুপারসেট হিসাবে কাজ করে - কমপক্ষে সেই জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলির মধ্যে যা টাইপস্ক্রিপ্ট সংকলক হ্যান্ডল করতে সক্ষম ...
ব্রেট জমির

হ্যাঁ, আমি এই ইস্যুটির "উভয় পক্ষের" হয়েছি। মূলত, টিএস এই অর্থে জেএসের একটি সুপারস্টেট যে: টাইপস্ক্রিপ্ট কিছু বৈধ জেএস কোড সম্পর্কে অভিযোগ করবে, তবে যতক্ষণ noEmitOnErrorঅবধি বন্ধ থাকবে, তবুও এটি তার প্রতিস্থাপনটি পরিচালনা করতে এবং নির্গত করতে সক্ষম। সুতরাং, এটি ত্রুটিগুলি দেখায় (যা বিরক্তিকর হয়), আপনি আসলে সেই ত্রুটিগুলি উপেক্ষা করতে পারেন এবং সত্ত্বেও টাইপস্ক্রিপ্ট প্রতিস্থাপনটি ব্যবহার করতে পারেন (উদাহরণস্বরূপ, জেএস থেকে টিএসে ধীরে ধীরে রূপান্তরকরণ)। এছাড়াও, কমপক্ষে কিছু ত্রুটি যেমন সুইচগুলির মাধ্যমে noImplicitAny(সম্ভবত সমস্ত, যদিও আইডিকে) অক্ষম করা যেতে পারে ।
ভেন্রিক্স

51

আপডেট: সরঞ্জামটি এই পোস্টে বিবরণে বর্ণিত হয়েছে

জাভাস্ক্রিপ্ট কোডটি স্বয়ংক্রিয়ভাবে টাইপস্ক্রিপ্টে রূপান্তর করার জন্য সংস্করণ 9 ( ইএপি বিল্ডগুলি উপলভ্য ) দিয়ে রিসার্চারের কার্যকারিতা রয়েছে। আপনি .js ফাইলটির পুনরায় নামকরণ করে .ts এ পরিবর্তন করতে পারেন এবং আর এর মতো # টি পরামর্শ দেখতে পারেন:

বাস্তব বিশ্বের উদাহরণে এটি চেষ্টা করে দেখেনি। তবে এটি বিপুল সংখ্যক জাভাস্ক্রিপ্ট নিদর্শনকে রূপান্তর করতে সক্ষম।


আমি হ্যান্ড-এডিটেড মেটা ফাইলগুলি ব্যবহার করে এটির প্রয়োজনীয় সমস্ত টিএস ব্লাট তৈরি করে ফ্লাইতে এটি করতে পছন্দ করব।
xamiro

হ্যালো, আমি পুনরায় শেয়ারার ব্যবহার করছি তাই কেবলমাত্র .js থেকে .ts? আমি যেমন a.js ফাইলটি ব্যবহার করছি এবং ফাইলটির নতুন নামকরণ করা কি রিচার্চারটি কোনও পরামর্শ দেবে? আমি ভিজ্যুয়াল স্টুডিও সম্প্রদায়ের সংস্করণটি ব্যবহার করছি এবং পুনরায় ভাগ করুন
সুইফট

1

টার্মিনাল থেকে (ম্যাক):

for f in *.js; do mv $f `basename $f .js`.ts; done;

সমস্ত .js ফাইলকে .ts এ পুনরায় নামকরণ করে

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

জিএনইউ সন্ধানী (সর্বাধিক * নিক্স) + বাশ সহ, কেবল করুন:

find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;

10
+1 - এটি একটি সংক্ষিপ্ত বইটি স্বয়ংক্রিয়ভাবে পুরো সংস্করণে রূপান্তর করার চেষ্টা করার মতো।
ফেনটন

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

1
কি থেকে রূপান্তর? জেএস থেকে প্রকারভেদগুলি এবং সেগুলিতে ভার্সে যুক্ত? ক্লাস, ইন্টারফেস, মডিউলগুলি কীভাবে উত্পন্ন হতে পারে তা নিশ্চিত নয় (কীভাবে স্বয়ংক্রিয়ভাবে রূপান্তরিত হতে পারে)।
7zark7

4
সমস্ত জাভাস্ক্রিপ্ট কোড var a = 5; a = "";
টাইপস্ক্রিপ্টে

4
এটি দ্বিতীয় এবং ডাউনভোটকে ন্যায়সঙ্গত প্রমাণ করতে, আপনি খুব তাড়াতাড়ি বুঝতে পারবেন যে আপনি যখন জালিয়াতি থেকে স্থানীয় মডিউল (যেমন: jquery.address, ইত্যাদি) থেকে মডিউল বা প্লাগইনগুলি টাইপস্ক্রিপ্টে রূপান্তর করার চেষ্টা করেন তখন সমস্ত JS কোড টাইপস্ক্রিপ্টে বৈধ নয়
dpb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.