TypeScript
उपयोगकर्ता परिभाषित प्रकार गार्ड
खोज…
वाक्य - विन्यास
- टाइपऑफ़ x === "टाइप नाम"
- एक्स इंस्टोफ़ टाइपनेम
- फ़ंक्शन (फू: कोई): फू टाइपनेम है {/ * कोड रिटर्निंग बूलियन * /}
टिप्पणियों
टाइपस्क्रिप्ट में टाइप एनोटेशन का उपयोग करने से आपके कोड से निपटने के लिए संभावित प्रकारों की कमी होती है, लेकिन रनवे के प्रकार के आधार पर विभिन्न कोड पथ लेने की आवश्यकता अभी भी आम है।
टाइप गार्ड आपको कोड लिखने देते हैं जो एक चर के रनटाइम प्रकार के आधार पर भेदभाव करते हैं, जबकि दृढ़ता से टाइप किए जाते हैं और जाति से बचते हैं (जिन्हें टाइप के रूप में भी जाना जाता है)।
Instof का उपयोग करना
instanceof
लिए यह आवश्यक है कि चर any
प्रकार का हो।
यह कोड ( इसे आज़माएं ):
class Pet { }
class Dog extends Pet {
bark() {
console.log("woof");
}
}
class Cat extends Pet {
purr() {
console.log("meow");
}
}
function example(foo: any) {
if (foo instanceof Dog) {
// foo is type Dog in this block
foo.bark();
}
if (foo instanceof Cat) {
// foo is type Cat in this block
foo.purr();
}
}
example(new Dog());
example(new Cat());
प्रिंट
woof
meom
सांत्वना देने के लिए।
टाइपोफ़ का उपयोग करना
typeof
का उपयोग तब किया जाता है जब आपको टाइप number
, string
, boolean
और symbol
बीच अंतर करने की आवश्यकता होती है। अन्य स्ट्रिंग स्थिरांक त्रुटि नहीं करेंगे, लेकिन या तो संकीर्ण प्रकारों के लिए उपयोग नहीं किए जाएंगे।
instanceof
विपरीत, typeof
किसी भी प्रकार के चर के साथ काम करेगा। नीचे दिए गए उदाहरण में, number | string
रूप में foo
टाइप किया जा सकता है number | string
मुद्दा के बिना number | string
।
यह कोड ( इसे आज़माएं ):
function example(foo: any) {
if (typeof foo === "number") {
// foo is type number in this block
console.log(foo + 100);
}
if (typeof foo === "string") {
// fooi is type string in this block
console.log("not a number: " + foo);
}
}
example(23);
example("foo");
प्रिंट
123
not a number: foo
रखवाली के कार्य
आप ऐसे कार्यों की घोषणा कर सकते हैं जो आपके द्वारा पसंद किए जाने वाले किसी भी तर्क का उपयोग करके गार्ड के रूप में कार्य करते हैं।
वे फार्म लेते हैं:
function functionName(variableName: any): variableName is DesiredType {
// body that returns boolean
}
यदि फ़ंक्शन सही है, तो टाइपस्क्रिप्ट फ़ंक्शन को कॉल द्वारा संरक्षित किसी भी ब्लॉक में DesiredType
के प्रकार को संकीर्ण करेगा।
उदाहरण के लिए ( इसे आज़माएं ):
function isString(test: any): test is string {
return typeof test === "string";
}
function example(foo: any) {
if (isString(foo)) {
// foo is type as a string in this block
console.log("it's a string: " + foo);
} else {
// foo is type any in this block
console.log("don't know what this is! [" + foo + "]");
}
}
example("hello world"); // prints "it's a string: hello world"
example({ something: "else" }); // prints "don't know what this is! [[object Object]]"
एक गार्ड के फंक्शन टाइप को डेडिकेट किया जाता है ( foo is Bar
है जो रिटर्न रिटर्न टाइप पोजिशन में होता है) का इस्तेमाल कंपाइल टाइम पर संकीर्ण टाइप्स में किया जाता है, फंक्शन बॉडी को रनटाइम पर इस्तेमाल किया जाता है। प्रकार की भविष्यवाणी और फ़ंक्शन को सहमत होना चाहिए, या आपका कोड काम नहीं करेगा।
प्रकार गार्ड कार्यों का उपयोग करने की जरूरत नहीं typeof
या instanceof
वे और अधिक जटिल तर्क का उपयोग कर सकते।
उदाहरण के लिए, यह कोड निर्धारित करता है कि क्या आपने संस्करण स्ट्रिंग की जाँच करके एक jQuery वस्तु प्राप्त की है।
function isJQuery(foo): foo is JQuery {
// test for jQuery's version string
return foo.jquery !== undefined;
}
function example(foo) {
if (isJQuery(foo)) {
// foo is typed JQuery here
foo.eq(0);
}
}