প্রকারভেদ আদিম ধরণের: "সংখ্যা" এবং "সংখ্যা" প্রকারের মধ্যে কোনও পার্থক্য (টিএসসির ক্ষেত্রে সংবেদনশীল)?


91

আমি ধরনের একটি প্যারামিটার লিখতে বোঝানো number, কিন্তু আমি টাইপ বানান ভুল, লেখা Numberপরিবর্তে।

আমার আইডিইতে (জেটব্রেইনস ওয়েবস্টর্ম) টাইপটি Numberএকই রঙের সাথে লিখিত হয় যা আদিম ধরণের জন্য ব্যবহৃত হয় number, আমি যদি কোনও শ্রেণীর নাম লিখি (পরিচিত বা অজানা) এটি আলাদা রঙ ব্যবহার করে, তাই আমি অনুমান করি যে এটি কোনওভাবে এটি সনাক্ত করে সঠিক / প্রায়-সঠিক / ধরণের-সঠিক ধরণের হিসাবে ভুল বানান টাইপ।

যখন আমি কোডটি সংকলন করি, উদাহরণস্বরূপ অভিযোগ করার পরিবর্তে যে সংকলক নামের একটি শ্রেণি খুঁজে Numberপায়নি, টিএসসি এই ত্রুটি বার্তাটি লিখে:

Illegal property access

তার মানে কি numberএবং Numberউভয়ই বিভিন্ন ধরণের হিসাবে সহ-বিদ্যমান?

এটি যদি সত্য হয় তবে classes শ্রেণির মধ্যে পার্থক্য কোনটি?

যদি এটি না হয়, তবে কেন এটি অজানা ক্লাসগুলির জন্য প্রদর্শিত একই ত্রুটি বার্তাটি কেন লিখেনি ("নামটি 'বর্তমানের স্কোপে বিদ্যমান নেই")

এই কোড:

class Test
{
    private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];

    // THIS WORKS
    public getValue(index:number):string
    {
        return this.myArray[index];
    }

    // THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS
    public getAnotherValue(index:Number):string
    {
        return this.myArray[index]; 
    }
}

উত্তর:


57

জাভাস্ক্রিপ্টে আদিম ধরণের (সংখ্যা, স্ট্রিং, ইত্যাদি) এবং অবজেক্টের ধরণের (সংখ্যা, স্ট্রিং, ইত্যাদি, যা রানটাইমের সময় প্রকাশিত হয়) ধারণা রয়েছে। টাইপস্ক্রিপ্ট টাইপ করুন numberএবং Numberযথাক্রমে তাদের উল্লেখ করুন। জাভাস্ক্রিপ্ট সাধারণত কোনও বস্তুর প্রকারকে তার আদিম সমতুল্যে জোর করে, বা বিপরীতে:

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35

টাইপস্ক্রিপ্ট টাইপ সিস্টেমের বিধিগুলি এইগুলি (স্পেস বিভাগে 3.7) এর সাথে ডিল করে:

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


8
এক যোগ হতে পারে যে, তারা ঠিক ক্রস হস্তান্তরযোগ্য নয় typescriptlang.org/Playground/...
basarat

4
মূল পোস্টারের উত্তরও দিতে হবে: হ্যাঁ টিএসসি (জাভাস্ক্রিপ্টের মতো) কেস সংবেদনশীল :)
বাসারত

115

টাইপসক্রিপ্ট করণীয় ও করণীয় থেকে দিকনির্দেশনা সহ রায়ের উত্তর বাড়াতে :

না কি ধরনের ব্যবহার Number, String, Boolean, Symbol, অথবা Objectএই ধরণের অ আদিম বাক্সযুক্ত যে বস্তু প্রায় জাভাস্ক্রিপ্ট কোড উপযুক্তভাবে কখনই ব্যবহৃত হয় পড়ুন।

/* WRONG */
function reverse(s: String): String;

না ধরনের ব্যবহার number, string, boolean, এবং symbol

/* OK */
function reverse(s: string): string;

4
@atilkan এটি মজা। আমার ধারণা তারা নিজের পরামর্শ নিচ্ছে না।
শন লুটিন

4
@ রায়ানকাভানফ অনুমান করুন আমাদের এটি রিপোর্ট করা উচিত।
এটেলিকান

4
@ শ্যানলুটিন অ্যারে সম্পর্কে কী, আমি কোনও ছোট হাতের উদাহরণ খুঁজে পাই না।
এটিকেল

4
@atilkan আপনি সম্ভবত []অ্যারের ধরণ বোঝাতে ব্যবহার করা উচিত । যদিও ব্যতিক্রম হতে পারে, আমি নিশ্চিত নই।
ভিক্টর জামামানিয়ান

4
@ ভিক্টরজাম্যানিয়ান এখানে একটি ভাল ব্যাখ্যা আছে -> toddmotto.com/typing-arrays-typescript
এটিকান

1

যেমন টাইপস্ক্রিপ্ট ডক বলেছেন:

var Number: NumberConstructor
(value?: any) => number

একটি অবজেক্ট যা কোনও ধরণের সংখ্যার প্রতিনিধিত্ব করে। সমস্ত জাভাস্ক্রিপ্ট নম্বরগুলি 64-বিট ভাসমান-পয়েন্ট সংখ্যা।

যেমনটি বলা হয়েছে, anyপ্যারামিটার এবং রিটার্ন নম্বর হিসাবে গ্রহণ করুন বাnull

এটি একটি মান নম্বর কিনা তা যাচাই করার একটি সহজ উপায় দেয়

Number("1234");   // 1234
Number("1234.54") // 1234.54
Number("-1234.54") // -1234.54
Number("1234.54.33") // null
Number("any-non-numeric") // null

সুতরাং সহজেই আমরা নম্বরটি পরীক্ষা করতে ব্যবহার করতে পারি, যেমন:

if(Number(val)){
   console.log('val is a number');
} else {
   console.log('Not a number');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.