টাইপস্ক্রিপ্টে "* .d.ts" সম্পর্কে


343

আমি কৌতূহল বোধ করছি *.d.tsকারণ আমি টাইপস্ক্রিপ্টে নবাগত। এবং আমি একজনকে বলেছিলাম যে এই ধরণের ফাইলটি সি ++ তে "প্রধান ফাইল" এর মতো তবে কেবল জেএসের জন্য। কিন্তু আমি একটি বিশুদ্ধ জাতীয় ফাইলে রূপান্তর করতে পারবেন না *.d.tsফাইল যদি না আমি forcely পরিবর্তন *.jsকরতে *.ts। সুতরাং আমার কাছে তিনটি ফাইল রয়েছে: একটি জেএস ফাইল, একটি টিএস ফাইল এবং একটি *.d.tsফাইল।


  1. তাদের মধ্যে সম্পর্ক কী?

  2. আমি কীভাবে *.d.tsফাইলটি ব্যবহার করতে পারি ? এর অর্থ কি আমি *.tsস্থায়ীভাবে ফাইলটি মুছতে পারি ?

  3. যদি তা হয় তবে *.d.tsফাইলটি কীভাবে জানতে পারে যে কোন জেএস ফাইলটি ম্যাপিং করছে?


যদি কেউ আমাকে উদাহরণ দিতে পারে তবে এটি খুব সুন্দর হবে।


: ভবিষ্যতের মানুষের জন্য: খুঁজে বার করো টাইপ করা বিষয় ডক typescriptlang.org/docs/handbook/declaration-files/templates/...
J.Ko

উত্তর:


349

"D.ts" ফাইলটি জাভাস্ক্রিপ্টে লিখিত কোনও API সম্পর্কে টাইপস্ক্রিপ্ট প্রকারের তথ্য সরবরাহ করতে ব্যবহৃত হয়। ধারণাটি হ'ল আপনি বিদ্যমান জাভাস্ক্রিপ্ট লাইব্রেরি jQuery বা আন্ডারস্কোরের মতো কিছু ব্যবহার করছেন। আপনি আপনার টাইপ স্ক্রিপ্ট কোড থেকে সেগুলি গ্রাস করতে চান।

Jquery বা আন্ডারস্কোর পুনরায় লেখার চেয়ে বা টাইপস্ক্রিপ্টে যাই হোক না কেন, আপনি পরিবর্তে d.ts ফাইলটি লিখতে পারেন, এতে কেবল টাইপ টিকা থাকে। তারপরে আপনার টাইপস্ক্রিপ্ট কোড থেকে আপনি খাঁটি জেএস লাইব্রেরি ব্যবহার করার সময় স্থির প্রকারের পরীক্ষার টাইপস্ক্রিপ্ট সুবিধা পাবেন।


26
অনেক ধন্যবাদ! তবে কীভাবে একটি * .d.ts ফাইলকে জেএস ফাইলে ম্যাপ করবেন? জেএস ফাইলটি কীভাবে জানতে পারে যে কোন ডি.টি.এস ফাইলটি ম্যাপিং করছে? তুমি কি আমাকে একটা উদাহরণ দিতে পারবে?

3
তবে d.ts ফাইলটি জেএস ফাইল থেকে উত্পন্ন হয় এবং জেএস ফাইল যদি ডি.এস.এস সম্পর্কে কিছুই জানে না জেএস ফাইল ব্যতীত অন্যান্য টিএসএস ফাইলে d.ts থেকে ফাংশনগুলি কীভাবে কল করবেন? আমি বিস্মিত ......

8
স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসা / 18091724/ … দেখুন । গ্রাহক টিএস ফাইলের শীর্ষে আপনাকে একটি /// <রেফারেন্স লাইন যুক্ত করতে হবে। আপনার d.ts এবং .js ফাইল উভয় উপলব্ধ থাকতে হবে।
ক্রিস টাভারেস

3
d.ts ফাইলটি সাধারণত জেএস ফাইল ডকুমেন্টেশন থেকে হাতে লেখা। এগুলির একটি বিশাল সংখ্যা জনপ্রিয় জাভাস্ক্রিপ্ট লাইব্রেরির জন্য উপলভ্য: github.com/borisyankov/DefinitelyType
বাসারাত

12
আপনি যদি আপনার প্রকল্পের জন্য কাস্টম ফাইল তৈরি করেন তবে আপনি কাস্টম ডিটিএস ফাইলগুলি কোথায় রাখবেন?
জয়

77

dঘোষণাপত্রের ফাইলগুলি বোঝায় :

যখন কোনও টাইপস্ক্রিপ্ট স্ক্রিপ্ট সংকলিত হয়ে যায় তখন একটি ঘোষণাপত্র ফাইল তৈরি করার বিকল্প রয়েছে (এক্সটেনশন .d.ts সহ) যা সংকলিত জাভাস্ক্রিপ্টের উপাদানগুলিতে ইন্টারফেস হিসাবে কাজ করে। প্রক্রিয়াতে সংকলক সমস্ত ফাংশন এবং পদ্ধতি সংস্থাগুলি সরিয়ে দেয় এবং রফতানির ক্ষেত্রে কেবলমাত্র স্বাক্ষর সংরক্ষণ করে। তৃতীয় পক্ষের বিকাশকারী যখন এটি টাইপস্ক্রিপ্ট থেকে গ্রহন করে তখন ফলস্বরূপ ঘোষণার ফাইলটি কোনও জাভাস্ক্রিপ্ট লাইব্রেরি বা মডিউলের রফতানি ভার্চুয়াল টাইপস্ক্রিপ্ট ধরণের বর্ণনা করতে ব্যবহার করা যেতে পারে।

ডিক্লেয়ারেশন ফাইলগুলির ধারণাটি সি / সি ++ এ পাওয়া শিরোনাম ফাইলের ধারণার সাথে সাদৃশ্যপূর্ণ।

declare module arithmetics {
    add(left: number, right: number): number;
    subtract(left: number, right: number): number;
    multiply(left: number, right: number): number;
    divide(left: number, right: number): number;
}

টাইপ ডিক্লেয়ারেশন ফাইলগুলি বিদ্যমান জাভাস্ক্রিপ্ট লাইব্রেরির জন্য হাতে হাতে লেখা যেতে পারে, যেমন jQuery এবং Node.js এর জন্য করা হয়েছে been

জনপ্রিয় জাভাস্ক্রিপ্ট লাইব্রেরির জন্য ঘোষণা ফাইলের বড় সংগ্রহের মধ্যে GitHub থেকে হোস্ট করা হয় DefinitelyTyped এবং Typings রেজিস্ট্রিটাইপিং নামক একটি কমান্ড-লাইন ইউটিলিটি সরবরাহাগুলি থেকে ঘোষণাপত্র অনুসন্ধান করতে এবং ইনস্টল করতে সহায়তা করার জন্য সরবরাহ করা হয়।


3
দ্রষ্টব্য: typingsটাইপস্ক্রিপ্ট ২.০ থেকে কমান্ড লাইন সরঞ্জামটির সত্যই প্রয়োজন নেই। আরও আপ-টু-ডেট পদ্ধতির নাম নামক স্থানের নীচে এনপিএম সংগ্রহস্থলের মাধ্যমে টাইপিং র‌্যাপার @typesব্যবহার করা। আরও তথ্যের জন্য github.com/typings/typings/blob/master/README.md
বার্টহ্যারিস

1
@ টাকেশিন আমি একটি প্রশ্ন পেয়েছি আমার কি আমার প্রকল্পের ভিতরে ব্যবহার করা হয় .tsx ফাইলের .d.ts ফাইলগুলি তৈরি করা দরকার? এগুলি কি তৃতীয় পক্ষের গ্রন্থাগারগুলিকে অতিরিক্ত তথ্য দেওয়ার পাশাপাশি অন্য কিছু যুক্ত করছে?
ক্রিজিসটফ ট্রজস

63

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

.d.tsএর জাভাস্ক্রিপ্ট ফাইলটিতে কোনও ফাইল ম্যাপ করতে আপনার ফাইলটিকে জাভাস্ক্রিপ্ট ফাইলের .d.tsমতোই নাম দেওয়া দরকার, একই ফোল্ডারে রাখুন এবং যে কোডটি এটির প্রয়োজন তা নির্দেশ করুন.d.ts ফাইলটির করুন।

উদাহরণস্বরূপ: test.jsএবং ফোল্ডারে রয়েছে, তারপরে আপনি এটিকে test.d.tsএমনভাবে testdir/একটি প্রতিক্রিয়া উপাদানটিতে আমদানি করুন:

import * as Test from "./testdir/test";

.d.tsফাইল এই মত একটি নামস্থান হিসাবে রপ্তানি করা হয়েছে:

export as namespace Test;

export interface TestInterface1{}
export class TestClass1{}

42
কীভাবে d.ts কে js তে সংযুক্ত করবেন সে সম্পর্কে কেউ উত্তর দেয়নি, তাই আমি ভেবেছিলাম এটি সঠিক জায়গা।
কনস্ট্যান্টিনএম

মনে রাখবেন যে আপনি যদি জেএস-এর জন্য কোনও ঘোষণার ফাইল তৈরি করেন যা আপনি তৈরি করেন নি (উদাহরণস্বরূপ এনপিএম থেকে একটি প্যাকেজ) যে .d.tsফাইলটিও প্যাকেজ হিসাবে আমদানি করা উচিত তেমন নামকরণ করা উচিত।
ইলেক্ট্রোভির

30

একটি নির্দিষ্ট ক্ষেত্রে জন্য কাজ উদাহরণ :

ধরা যাক আপনার আমার মডিউল রয়েছে যা আপনি এনপিএমের মাধ্যমে ভাগ করছেন ।

আপনি এটি দিয়ে ইনস্টল করুন npm install my-module

আপনি এটি এভাবে ব্যবহার করুন:

import * as lol from 'my-module';

const a = lol('abc', 'def');

মডিউলটির যুক্তি সবগুলিতে রয়েছে index.js:

module.exports = function(firstString, secondString) {

  // your code

  return result
}

টাইপগুলি যুক্ত করতে একটি ফাইল তৈরি করুন index.d.ts:

declare module 'my-module' {
  export default function anyName(arg1: string, arg2: string): MyResponse;
}

interface MyResponse {
  something: number;
  anything: number;
}

19

@ টাকেশিনের মত .d টাইপস্ক্রিপ্ট (.ts) এর জন্য ডিক্লোরেশন ফাইল।

এই পোস্টের উত্তর দেওয়ার আগে কয়েকটি বিষয় পরিষ্কার করা উচিত -

  1. টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের সিনট্যাকটিক সুপারসেট।
  2. টাইপসক্রিপ্টটি নিজে থেকে চালিত হয় না, এটি জাভাস্ক্রিপ্টে স্থানান্তরিত করা দরকার ( টাইপস্ক্রিপ্ট থেকে জাভাস্ক্রিপ্ট রূপান্তর )
  3. "প্রকারের সংজ্ঞা" এবং "টাইপ চেকিং" প্রধান অ্যাড-অন কার্যকারিতা যা টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের উপরে সরবরাহ করে। ( টাইপ স্ক্রিপ্ট এবং জাভাস্ক্রিপ্টের মধ্যে পার্থক্য পরীক্ষা করুন )

আপনি যদি ভাবছেন যদি টাইপস্ক্রিপ্টটি কেবল সিনট্যাকটিক সুপারসেট হয় তবে এটি কী উপকার করে - https://basarat.gitbooks.io/typescript/docs/why-typescript.html#the-typescript-type-s systemm

এই পোস্টের উত্তর দিতে -

যেমনটি আমরা আলোচনা করেছি, টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টের সুপারস্টেট এবং জাভাস্ক্রিপ্টে স্থানান্তরিত করা দরকার needs সুতরাং যদি কোনও লাইব্রেরি বা তৃতীয় পক্ষের কোড টাইপ স্ক্রিপ্টে লেখা হয় তবে এটি শেষ পর্যন্ত জাভাস্ক্রিপ্টে রূপান্তরিত হয় যা জাভাস্ক্রিপ্ট প্রকল্প দ্বারা ব্যবহার করা যেতে পারে তবে তদ্বিপরীত সত্য হয় না।

প্রাক্তন জন্য -

আপনি যদি জাভাস্ক্রিপ্ট লাইব্রেরি ইনস্টল করেন -

npm install --save mylib

এবং এটি টাইপ স্ক্রিপ্ট কোডে আমদানির চেষ্টা করুন -

import * from "mylib";

আপনি ত্রুটি পাবেন।

"মডিউল 'ম্যালিব' খুঁজে পাচ্ছেন না" "

@ ক্রিস দ্বারা উল্লিখিত হিসাবে, আন্ডারস্কোর, জ্যাকুরির মতো অনেক লাইব্রেরি ইতিমধ্যে জাভাস্ক্রিপ্টে লিখিত আছে। টাইপ স্ক্রিপ্ট প্রকল্পগুলির জন্য এই লাইব্রেরিগুলিকে পুনরায় লেখার পরিবর্তে বিকল্প সমাধানের প্রয়োজন ছিল।

এটি করার জন্য, আপনি জাভাস্ক্রিপ্ট লাইব্রেরিতে টাইপ ডিক্লেয়ারেশন ফাইল সরবরাহ করতে পারেন * .d.ts হিসাবে উপরের ক্ষেত্রে যেমন mylib.d.ts। ডিক্লারেশন ফাইলটি কেবল সংশ্লিষ্ট জাভাস্ক্রিপ্ট ফাইলে সংজ্ঞায়িত ফাংশন এবং ভেরিয়েবলগুলির প্রকারের ঘোষণা সরবরাহ করে।

এখন যখন আপনি চেষ্টা করুন -

import * from "mylib";

mylib.d.ts আমদানি হয়ে যায় যা জাভাস্ক্রিপ্ট লাইব্রেরি কোড এবং টাইপস্ক্রিপ্ট প্রকল্পের মধ্যে একটি ইন্টারফেস হিসাবে কাজ করে।


3

এই উত্তরটি ধরে নিয়েছে যে আপনার কাছে কিছু জাভাস্ক্রিপ্ট রয়েছে যা আপনি টাইপস্ক্রিপ্টে রূপান্তর করতে চান না, তবে আপনি নিজের ন্যূনতম পরিবর্তনগুলির সাথে টাইপ চেকিং থেকে সুবিধা পেতে চান .js। একটি .d.tsফাইল অনেকটা সি বা সি ++ হেডার ফাইলের মতো। এর উদ্দেশ্য একটি ইন্টারফেস সংজ্ঞায়িত করা। এখানে একটি উদাহরণ:

mashString.d.ts

/** Makes a string harder to read. */
declare function mashString(
    /** The string to obscure */
    str: string
):string;
export = mashString;

mashString.js

// @ts-check
/** @type {import("./mashString")} */
module.exports = (str) => [...str].reverse().join("");

main.js

// @ts-check
const mashString = require("./mashString");
console.log(mashString("12345"));

এখানে সম্পর্কটি হ'ল: mashString.d.tsএকটি ইন্টারফেস সংজ্ঞা দেয়, ইন্টারফেস mashString.jsপ্রয়োগ করে এবং ইন্টারফেস main.jsব্যবহার করে uses

কাজ করতে টাইপ চেকিং পেতে // @ts-check আপনার .jsফাইলগুলিতে যুক্ত করুন। তবে এটি কেবলমাত্র main.jsইন্টারফেসটি সঠিকভাবে ব্যবহার করে তা পরীক্ষা করে । mashString.jsএটি কার্যকরভাবে প্রয়োগ করে তা নিশ্চিত করার জন্য আমরা /** @type {import("./mashString")} */রফতানির আগে যুক্ত করি ।

টাইপ চেকিং এবং ডকুমেন্টেশন উন্নত করার জন্য আপনি নিজের প্রারম্ভিক .d.tsফাইলগুলি তৈরি করতে পারেন tsc -allowJs main.js -dতারপরে এগুলি ম্যানুয়ালি প্রয়োজনীয় হিসাবে সম্পাদনা করুন।

অধিকাংশ ক্ষেত্রে বাস্তবায়ন এবং ইন্টারফেস এখানে নাম একই, mashString। তবে আপনার কাছে বিকল্প বাস্তবায়ন থাকতে পারে। উদাহরণস্বরূপ আমরা একটি নতুন নামকরণ mashString.jsকরতে reverse.jsএবং একটি বিকল্প থাকতে পারে encryptString.js

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.