टाइपस्क्रिप्ट आदिम प्रकार: "संख्या" और "संख्या" (TSC केस-असंवेदनशील) के बीच कोई अंतर?


91

मेरा मतलब टाइप के पैरामीटर लिखना था number, लेकिन मैंने टाइप लिखने की Numberबजाय गलत टाइप किया।

मेरी IDE (JetBrains WebStorm) पर टाइप Numberउसी रंग के साथ लिखा जाता है जिसका उपयोग आदिम प्रकार के लिए किया जाता है number, जबकि अगर मैं किसी वर्ग (ज्ञात या अज्ञात) का नाम लिखता हूं तो यह एक अलग रंग का उपयोग करता है, इसलिए मुझे लगता है कि किसी भी तरह से इसे पहचानता हूं। सही / लगभग-सही / सॉर्ट-ऑफ-सही प्रकार के रूप में गलत वर्तनी प्रकार।

जब मैं कोड संकलित करता हूं, उदाहरण के लिए शिकायत करने के बजाय कि संकलक को एक वर्ग नाम नहीं मिला Number, TSC इस त्रुटि संदेश को लिखता है:

Illegal property access

क्या इसका मतलब यह है कि numberऔर Numberदोनों अलग-अलग प्रकारों के रूप में मौजूद हैं?

यदि यह सत्य है, तो उन वर्गों के बीच अंतर क्या है?

यदि यह मामला नहीं है, तो यह अज्ञात कक्षाओं के लिए प्रदर्शित होने वाले एक ही त्रुटि संदेश को क्यों नहीं लिखा है ("वर्तमान संख्या में 'नंबर' नाम मौजूद नहीं है")

यह कोड है:

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
कोई व्यक्ति यह कह सकता है कि वे बिलकुल पार जाने योग्य नहीं हैं: टाइपस्क्रिप्ट
lang.org/Playground/…

5
मूल पोस्टर का जवाब देने के लिए भी: हां TSC (जैसे जावास्क्रिप्ट) मामला संवेदनशील है :)
बेसरात

115

टाइपस्क्रिप्ट Do's और Don'ts से मार्गदर्शन के साथ रयान के जवाब को बढ़ाने के लिए :

कभी प्रकार का उपयोग करें Number, String, Boolean, Symbol, या Objectइन प्रकार के गैर आदिम बॉक्स्ड वस्तुओं है कि लगभग जावा स्क्रिप्ट कोड में उचित रूप से इस्तेमाल कभी नहीं कर रहे हैं को देखें।

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

करो प्रकार का उपयोग करें number, string, boolean, और symbol

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

2
@atilkan यह मजेदार है। मुझे लगता है कि वे अपनी सलाह नहीं ले रहे हैं।
शॉन लुटिन

1
@RyanCavanaugh लगता है कि हमें यह रिपोर्ट करनी चाहिए।
लोकलहोस्ट

3
@ShaunLuttin सरणी के बारे में क्या, मैं कोई लोअरकेस उदाहरण नहीं ढूँढ सकता।
लोकलहोस्ट

3
@atilkan आपको संभवतः []सरणी प्रकारों को दर्शाने के लिए उपयोग करना चाहिए । हालांकि कुछ अपवाद हो सकते हैं, मुझे यकीन नहीं है।
विक्टर ज़मानियन

1
@VictorZamanian यहाँ एक अच्छी व्याख्या है -> toddmotto.com/typing-arrays-typescript
localhoost

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');
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.