প্রকারভেদ: স্ট্রিং এবং স্ট্রিংয়ের মধ্যে পার্থক্য


255

টাইপস্ক্রিপ্টে স্ট্রিং এবং স্ট্রিংয়ের মধ্যে পার্থক্য কি কেউ জানেন? আমি কি ধরে নিচ্ছি যে তাদের একই হওয়া উচিত?

var a: String = "test";
var b: string = "another test";
a = b;
b = a; // this gives a compiler error!

সংকলকের বর্তমান সংস্করণটি বলে:

Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object.
     Prefer using 'string' when possible.

এটা কি বাগ?


1
আমি মনে করি "এটি একটি বাগ" আসলেই একটি ভাল দার্শনিক প্রশ্ন। এটি সম্ভবত "উদ্দেশ্য" হতে পারে তবে এটি বিভ্রান্তি তৈরি করে এবং ত্রুটিগুলি সংকলন করে। আমি মনে করি এটি কমপক্ষে একটি সমস্যা।
গেরম্যান 13

উত্তর:


251

এখানে একটি উদাহরণ যা পার্থক্য দেখায়, যা ব্যাখ্যাতে সহায়তা করবে।

var s1 = new String("Avoid newing things where possible");
var s2 = "A string, in TypeScript of type 'string'";
var s3: string;

Stringএটি জাভাস্ক্রিপ্ট স্ট্রিং টাইপ, যা আপনি নতুন স্ট্রিং তৈরি করতে ব্যবহার করতে পারেন। কেউ জাভাস্ক্রিপ্টে এটি করেন না যেমন আক্ষরিককে আরও ভাল হিসাবে বিবেচনা করা হয়, সুতরাং s2উপরের উদাহরণে newকীওয়ার্ডটি ব্যবহার না করে এবং Stringঅবজেক্টটি স্পষ্টভাবে ব্যবহার না করেই একটি নতুন স্ট্রিং তৈরি করে ।

string টাইপস্ক্রিপ্ট স্ট্রিং টাইপ, যা আপনি ভেরিয়েবল, পরামিতি এবং রিটার্ন মানগুলি টাইপ করতে ব্যবহার করতে পারেন।

অতিরিক্ত নোট ...

বর্তমানে (ফেব্রুয়ারী 2013) উভয় s1এবং s2বৈধ জাভাস্ক্রিপ্ট হয়। s3বৈধ টাইপস্ক্রিপ্ট।

এর ব্যবহার String। আপনার সম্ভবত এটি ব্যবহার করার দরকার নেই, স্ট্রিং আক্ষরিকগুলি স্ট্রিং আরম্ভ করার সঠিক উপায় হিসাবে সর্বজনীনভাবে গৃহীত হয়। জাভাস্ক্রিপ্টে, অবজেক্ট ল্যাটারাল এবং অ্যারের লিটারালগুলিও ব্যবহার করা ভাল considered

var arr = []; // not var arr = new Array();
var obj = {}; // not var obj = new Object();

আপনার যদি সত্যিই স্ট্রিংয়ের জন্য কোনও পেন্টেন্ট ছিল, তবে আপনি এটি দুটি পদ্ধতির একটিতে টাইপস্ক্রিপ্টে ব্যবহার করতে পারেন ...

var str: String = new String("Hello world"); // Uses the JavaScript String object
var str: string = String("Hello World"); // Uses the TypeScript string type

যে পরিষ্কার করার জন্য ধন্যবাদ। সুতরাং স্ট্রিংয়ের মানগুলির সাথে কাজ করে এমন অন্যান্য লিবস ব্যবহার করার সময় (যে কেউ আসলে স্ট্রিং (?) ব্যবহার করেন না এমন ধারণার উপর ভিত্তি করে) সম্ভাব্য ধরণের রূপান্তর সমস্যাগুলি এড়াতে প্রাথমিক প্রকারের স্ট্রিংটি ব্যবহার করা নিরাপদ। স্ট্রিং এবং স্ট্রিং এবং বিপরীতমুখীগুলির মধ্যে থাকা সুনির্দিষ্ট কার্যকারিতা সমানভাবে বিবেচিত হবে?
Paul0515

1
টাইপস্ক্রিপ্ট প্রকারগুলি আপনাকে 100% সামঞ্জস্যপূর্ণ জাভাস্ক্রিপ্ট দেওয়ার জন্য (ES3 বা ES5 স্বাদে এবং সংস্করণ 1 ES6 স্বাদে) হিসাবে ব্যবহার করা আসলে নিরাপদ। আমি ব্যবহার সুপারিশ করবে stringধরন এবং একটি আক্ষরিক initialisation: var s: string = "My String";
ফেন্টন

রেকর্ডটির জন্য, টাইপ-ইনফারেন্সকে ধন্যবাদ, var s: string = "My String"একইরকম var s = "My String"... এছাড়াও, আমি যতবার বার এই প্রতিক্রিয়াটি পড়েছি, তা এখনও stringটাইপস্ক্রিপ্টে টাইপের উদ্দেশ্যটি উপলব্ধি করছি না , যেহেতু দিনের শেষে , ('My String')['constructor'] === String...
mindplay.dk

2
আপনি যদি কোনও মান দিয়ে ভেরিয়েবলটি আরম্ভ না করেন তবে আপনি সাধারণত টীকা যোগ করবেন।
ফেন্টন

2
আমি স্পষ্ট করে একটি উত্তর যুক্ত করেছি যে "foo" বনাম নতুন স্ট্রিং ("foo") টাইপস্ক্রিপ্ট দ্বারা প্রবর্তিত নতুন পার্থক্য নয় - আমি মনে করি না যে এটি একটি জেএস টাইপ এবং অন্যটিকে টিএস টাইপ কল করা সহায়ক।
জো লি-ময়েত

60

দুটি ধরণের জাভা স্ক্রিপ্টের পাশাপাশি টাইপস্ক্রিপ্টে স্বতন্ত্র - টাইপসক্রিপ্ট কেবল আমাদের বরাবর যাওয়ার সাথে প্রকারগুলি বর্নিত করতে এবং পরীক্ষা করতে সিনট্যাক্স দেয়।

StringString.prototypeএর প্রোটোটাইপ শৃঙ্খলে থাকা কোনও বস্তুর উদাহরণ বোঝায় । আপনি বিভিন্ন উপায়ে যেমন একটি উদাহরণ পেতে পারেন new String('foo')এবং Object('foo')। আপনি উদাহরণস্বরূপ অপারেটরের Stringসাথে উদাহরণটির জন্য পরীক্ষা করতে পারেন ।instanceofmyString instanceof String

stringজাভাস্ক্রিপ্ট এর আদিম ধরনের এক, এবং stringমান প্রাথমিকভাবে লিটারেল যেমন সঙ্গে নির্মিত 'foo'এবং "bar", এবং বিভিন্ন ফাংশন এবং অপারেটরদের ফলাফলের প্রকার হিসাবে। আপনি stringটাইপ ব্যবহার করে পরীক্ষা করতে পারেন typeof myString === 'string'

সময়ের বেশিরভাগ অংশটি stringহ'ল আপনার ব্যবহার করা উচিত - প্রায় সমস্ত এপিআই ইন্টারফেস যা স্ট্রিংগুলি গ্রহণ করে বা ফেরত দেয় তা এটি ব্যবহার করবে। সমস্ত জেএস আদিম ধরণেরগুলিকে বস্তু হিসাবে ব্যবহার করার সময় তাদের সম্পর্কিত অবজেক্টের ধরণগুলি ( বাক্সযুক্ত ) মোড়ানো হবে ( যেমন: বৈশিষ্ট্য অ্যাক্সেস করা বা কলিং পদ্ধতিগুলি। যেহেতু Stringবর্তমানে টাইপস্ক্রিপ্টের মূল লাইব্রেরীতে ক্লাসের পরিবর্তে একটি ইন্টারফেস হিসাবে ঘোষণা করা হয়েছে , স্ট্রাকচারাল টাইপিংয়ের অর্থ এমন stringএকটি উপপ্রকার হিসাবে বিবেচিত Stringযা আপনার প্রথম লাইন সংকলনের ধরণের চেকগুলি পাস করে।


2

জাভাস্ক্রিপ্ট স্ট্রিং স্ট্রিং আদিম টাইপ বা স্ট্রিং অবজেক্ট হতে পারে। নিম্নলিখিত কোডটি পার্থক্য দেখায়:

var a: string = 'test'; // string literal
var b: String = new String('another test'); // string wrapper object

console.log(typeof a); // string
console.log(typeof b); // object

আপনার ত্রুটি:

'স্ট্রিং' টাইপ 'স্ট্রিং' টাইপ করার জন্য অনুমোদিত নয় is 'স্ট্রিং' একটি আদিম, তবে 'স্ট্রিং' একটি মোড়কের বস্তু। সম্ভব হলে 'স্ট্রিং' ব্যবহার পছন্দ করুন।

টিএস সংকলক দ্বারা ছুঁড়ে ফেলা হয়েছে কারণ আপনি টাইপটি stringস্ট্রিং অবজেক্ট টাইপের ( newকীওয়ার্ডের মাধ্যমে তৈরি ) টাইপ করার চেষ্টা করেছিলেন । সংকলক আপনাকে বলছে যে আপনার টাইপটি stringকেবল স্ট্রিং আদিম ধরণের জন্য ব্যবহার করা উচিত এবং স্ট্রিং অবজেক্টের ধরণের বর্ণনা দেওয়ার জন্য আপনি এই প্রকারটি ব্যবহার করতে পারবেন না।


1

টাইপস্ক্রিপ্ট: Stringবনামstring

'স্ট্রিং' টাইপের যুক্তি 'স্ট্রিং' টাইপের প্যারামিটারে অর্পণযোগ্য নয়।

'স্ট্রিং' একটি আদিম, তবে 'স্ট্রিং' একটি মোড়কের বস্তু।

সম্ভব হলে 'স্ট্রিং' ব্যবহার পছন্দ করুন।

ডেমো

স্ট্রিং অবজেক্ট

// error
class SVGStorageUtils {
  store: object;
  constructor(store: object) {
    this.store = store;
  }
  setData(key: String = ``, data: object) {
    sessionStorage.setItem(key, JSON.stringify(data));
  }
  getData(key: String = ``) {
    const obj = JSON.parse(sessionStorage.getItem(key));
  }
}

স্ট্রিং আদিম

// ok
class SVGStorageUtils {
  store: object;
  constructor(store: object) {
    this.store = store;
  }
  setData(key: string = ``, data: object) {
    sessionStorage.setItem(key, JSON.stringify(data));
  }
  getData(key: string = ``) {
    const obj = JSON.parse(sessionStorage.getItem(key));
  }
}

এখানে চিত্র বর্ণনা লিখুন


0

দ্রুত পাঠকদের জন্য:

নাম্বার, স্ট্রিং , বুলিয়ান, সিম্বল বা অবজেক্ট টাইপগুলি কখনই ব্যবহার করবেন না এই প্রকারগুলি অ-আদিম বক্স বাক্সগুলিকে বোঝায় যা জাভাস্ক্রিপ্ট কোডে প্রায়শই যথাযথভাবে ব্যবহৃত হয় না।

উত্স: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html

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