वहाँ दोनों `अशक्त` और` अपरिभाषित` के लिए जाँच करने के लिए एक रास्ता है?


381

चूंकि टाइपस्क्रिप्ट दृढ़ता से टाइप किया जाता है, बस if () {}जांच करने के लिए nullऔर undefinedसही ध्वनि नहीं करता है।

क्या टाइपस्क्रिप्ट में इसके लिए कोई समर्पित फ़ंक्शन या सिंटैक्स शुगर है?


9
Since TypeScript is strongly-typedमैं इसे के डॉक्स में इस नहीं पा सके और मैं इसके बारे में शक है ...
pawciobiel

3
नवीनतम गैर-अशक्त प्रकारों पर पढ़ने की सलाह देते हैं, यह टाइपस्क्रिप्ट 2 है, लेकिन पहले से ही आज के रूप में बीटा में है। [गैर-अशक्त प्रकार # 7140] ( github.com/Microsoft/TypeScript/pull/7140 )
RyBolt

2
टाइपस्क्रिप्ट में कुछ भी करने के लिए कोई समर्पित कार्य नहीं है। यह एक टाइपिंग सिस्टम और एक ट्रांसपिलर है, लाइब्रेरी नहीं।

जवाबों:


378

एक करतब दिखाने की जांच का उपयोग करना, आप दोनों का परीक्षण कर सकते nullहैं और undefinedएक हिट में:

if (x == null) {

यदि आप एक सख्त जांच का उपयोग करते हैं, तो यह केवल निर्धारित मानों के लिए सही nullहोगा और अपरिभाषित चर के लिए सही मूल्यांकन नहीं करेगा:

if (x === null) {

आप इस उदाहरण का उपयोग करके विभिन्न मूल्यों के साथ इसे आज़मा सकते हैं:

var a: number;
var b: number = null;

function check(x, name) {
    if (x == null) {
        console.log(name + ' == null');
    }

    if (x === null) {
        console.log(name + ' === null');
    }

    if (typeof x === 'undefined') {
        console.log(name + ' is undefined');
    }
}

check(a, 'a');
check(b, 'b');

उत्पादन

"ए == अशक्त"

"एक अपरिभाषित है"

"बी == अशक्त"

"बी === नल"


52
"बाजीगरी-जांच" क्या है?
कोलबोक

18
@akapelko यह वह जगह है जहाँ पर टाइप किया जाता है (यानी "क्या हम इस प्रकार का बूलियन बना सकते हैं")। तो एक खाली स्ट्रिंग को बूलियन झूठा माना जाता है, उदाहरण के लिए। जब जुगाली होती है तो एक सामान्य बग: "false" == false"असत्य" जैसे गैर-रिक्त स्ट्रिंग का मूल्यांकन करता है true
फेंटन

12
यह जेएस के 'प्रकार के जोर' के कारण है।
Astravagrant

सिवाय अगर x 0 है (और यह एक वैध मान है), तो यह आपके अपरिभाषित / अशक्त परीक्षण को पारित कर देगा।
जॉन गंटर

3
@JonGunter जो कि सच / झूठे if(x)स्टाइल की जाँच के बारे में सही होगा , लेकिन नहीं if(x == null), जो केवल पकड़ता है nullऔर undefined। इसका उपयोग करके जांचें कि var c: number = 0; check(c, 'b');यह "शून्य" नहीं है null, या undefined
फेंटन

268
if( value ) {
}

मूल्यांकन करेगा trueकि valueक्या नहीं है:

  • null
  • undefined
  • NaN
  • खाली स्ट्रिंग ''
  • 0
  • false

टाइपस्क्रिप्ट में जावास्क्रिप्ट नियम शामिल हैं।


12
अगर बूलियन प्रकार का मूल्य क्या है?
२२:५२ पर :56ststigator

क्या आप दो चर मिला सकते हैं। अगर (value1 && value2) यह जांचने के लिए कि क्या दोनों अपरिभाषित हैं?
ARK

8
@ RamazanSağır हाँ, मुझे पता है कि धन्यवाद, लेकिन तथ्य यह है कि 0 मूल्य कुछ वैध है जो मेरे पास हो सकता है, केवल चेक मैं करना चाहता हूं कि चर न तो अशक्त या अपरिभाषित है। मैंने पढ़ा है कि मैं इसे वैल का उपयोग करके कर सकता हूं! = Null (! = के बजाय! == भी अपरिभाषित मान की जांच करता है)
एलेक्स

4
यदि tslint नियम - "सख्त-बूलियन-अभिव्यक्ति" सक्षम है तो यह समाधान काम नहीं करेगा।
ip_x

1
यह गलत का मूल्यांकन करेगा यदि हमें मिथ्या मान लें, जितना कि यह सरल है।
अय्यारी

50

क्या टाइपस्क्रिप्ट में इसके लिए फ़ंक्शन या सिंटैक्स शुगर समर्पित है

टाइपस्क्रिप्ट जावास्क्रिप्ट संस्करण को पूरी तरह से समझता है जो है something == null

टाइपस्क्रिप्ट दोनों सही ढंग से nullऔर undefinedइस तरह की जाँच के साथ शासन करेगा ।

अधिक

https://basarat.gitbook.io/typescript/recap/null-undefined


1
मुझे दो बराबर करना पसंद है myVar == null। बस एक और विकल्प।
डेविड शेरेट

30
== nullअशक्त और अपरिभाषित के लिए परीक्षण करने का सही तरीका है। !!somethingजेएस (सिर्फ उपयोग something) में एक सशर्त में एक बेकार जबरदस्ती है । !!somethingयह भी 0 और '' को गलत ठहराएगा, जो आप अशक्त / अपरिभाषित की तलाश में नहीं है।
C Snover

39

मैंने टाइपस्क्रिप्ट खेल के मैदान पर विभिन्न परीक्षण किए:

http://www.typescriptlang.org/play/

let a;
let b = null;
let c = "";
var output = "";

if (a == null) output += "a is null or undefined\n";
if (b == null) output += "b is null or undefined\n";
if (c == null) output += "c is null or undefined\n";
if (a != null) output += "a is defined\n";
if (b != null) output += "b is defined\n";
if (c != null) output += "c is defined\n";
if (a) output += "a is defined (2nd method)\n";
if (b) output += "b is defined (2nd method)\n";
if (c) output += "c is defined (2nd method)\n";

console.log(output);

देता है:

a is null or undefined
b is null or undefined
c is defined

इसलिए:

  • जाँच करना कि क्या (a == null) यह जानना सही है कि क्या अशक्त या अपरिभाषित है
  • अगर (a! = null) यह जानना सही है कि क्या परिभाषित किया गया है
  • अगर (ए) परिभाषित है तो यह जानना गलत है

1
आप इसके लिए टाइपस्क्रिप्ट खेल के मैदान का उपयोग क्यों करेंगे? यहां कुछ भी टाइपस्क्रिप्ट के साथ करने के लिए कुछ भी नहीं है।

10
क्योंकि प्रश्न टाइपस्क्रिप्ट से संबंधित था, इसलिए मैं टाइपस्क्रिप्ट ट्रांसपिलर के खिलाफ विभिन्न प्रस्तावित समाधानों का परीक्षण करने की कोशिश कर रहा था।
जुआंगी जोर्डन

6
टीएस ट्रांसपिलर इस कोड को बिल्कुल भी परिवर्तित नहीं करेगा।

31

मुझे लगता है कि इस उत्तर को अपडेट की आवश्यकता है, पुराने उत्तर के लिए संपादित इतिहास की जांच करें।

मूल रूप से, आपके पास तीन स्थगित मामले हैं अशक्त, अपरिभाषित और अघोषित, नीचे स्निपेट देखें।

// bad-file.ts
console.log(message)

आपको एक त्रुटि मिलेगी कि चर messageअपरिभाषित (उर्फ अघोषित) है, ज़ाहिर है, टाइपस्क्रिप्ट कंपाइलर आपको ऐसा नहीं करने देना चाहिए, लेकिन वास्तव में कुछ भी आपको रोक नहीं सकता है।

// evil-file.ts
// @ts-gnore
console.log(message)

संकलक ऊपर दिए गए कोड को संकलित करने में प्रसन्न होगा। इसलिए, यदि आप सुनिश्चित हैं कि सभी चर घोषित किए गए हैं, तो आप बस ऐसा कर सकते हैं

if ( message != null ) {
    // do something with the message
}

उपरोक्त कोड के लिए जाँच करेगा nullऔर undefined, लेकिन अगर मामले में messageचर अघोषित (सुरक्षा के लिए) हो सकता है, तो आप निम्नलिखित कोड पर विचार कर सकते हैं

if ( typeof(message) !== 'undefined' && message !== null ) {
    // message variable is more than safe to be used.
}

नोट: यहां आदेश typeof(message) !== 'undefined' && message !== nullबहुत महत्वपूर्ण है कि आपको undefinedराज्य के लिए पहले जांच करनी होगी कि यह पहले जैसा ही होगा message != null, धन्यवाद @Jaider।


4
एम। कमल अगर कुछ = 0, तो आपका सत्यापन! कुछ आपको समस्याएँ देगा।
justcode

1
@ आरती आप मुझे एक उदाहरण दे सकते हैं !!
अहमद कमाल

2
@arturios लेकिन 0 पहले से ही जावास्क्रिप्ट में एक मिथ्या मूल्य है !! तो यहाँ क्या बात है?
अहमद कमाल

1
@ अल-अन नोप, इसे यहां
अहमद कमाल

1
अद्यतन संस्करण गलत है। जांच करने वाली पहली चीज अपरिभाषित होनी चाहिए ... जैसे:if(typeof something !== 'undefined' && something !== null){...}
जैदर

27

में टाइपप्रति 3.7 हम अब वैकल्पिक श्रृंखलन और Nullish वालों की जांच करने के अशक्त और अपरिभाषित एक ही समय में, उदाहरण के लिए:

let x = foo?.bar.baz();

यह कोड जाँच करेगा कि क्या फू परिभाषित है अन्यथा यह अपरिभाषित वापस आ जाएगा

पुराना तरीका :

if(foo != null && foo != undefined) {
   x = foo.bar.baz();
} 

इस:

let x = (foo === null || foo === undefined) ? undefined : foo.bar();

if (foo && foo.bar && foo.bar.baz) { // ... }

वैकल्पिक श्रृंखलन के साथ होगा:

let x = foo?.bar();

if (foo?.bar?.baz) { // ... }

एक और नई सुविधा Nullish Coalescing है , उदाहरण:

let x = foo ?? bar(); // return foo if it's not null or undefined otherwise calculate bar

पुराना तरीका:

let x = (foo !== null && foo !== undefined) ?
foo :
bar();

3
यह अब स्वीकृत उत्तर होना चाहिए। टाइपस्क्रिप्ट 3.7 भी "Nullish Coalescing" का समर्थन करता है। var foo = possibleUndefinedOrNull ?? fallbackValueIfFirstValueIsUndefinedOrNull; यहाँ प्रलेखन है: टाइपस्क्रिप्ट
lang.org/docs/handbook/release-notes/…

23

आप कोशिश करना चाह सकते हैं

if(!!someValue)

के साथ !!

व्याख्या

पहला !आपकी अभिव्यक्ति को एक booleanमूल्य में बदल देगा ।

तो !someValueहै trueअगर someValueहै falsy और falseअगर someValueहै truthy । यह भ्रामक हो सकता है।

एक और जोड़ कर !, अभिव्यक्ति अब trueअगर someValueहै truthy और falseअगर someValueहै falsy है, जो बहुत प्रबंधन करने के लिए आसान है।

विचार-विमर्श

अब, मैं खुद को परेशान क्यों करता हूं if (!!someValue)जब कोई चीज if (someValue)मुझे ऐसा ही परिणाम देती है?

क्योंकि !!someValueवास्तव में एक बूलियन अभिव्यक्ति है, जबकि someValueबिल्कुल कुछ भी हो सकता है। इस तरह की अभिव्यक्ति अब कार्य लिखने के लिए बदल जाएगी (और भगवान को हमारी आवश्यकता है) जैसे:

isSomeValueDefined(): boolean {
  return !!someValue
}

के बजाय:

isSomeValueDefined(): boolean {
  if(someValue) {
    return true
  }
  return false
}

मुझे उम्मीद है यह मदद करेगा।


इसलिए, अगर कुछValue 'झूठा' (स्ट्रिंग प्रकार के साथ) है, तो !! someValue गलत है (बूलियन प्रकार)?
पाऊल ने

मुझे लगता है कि आप ऐसा कह सकते हैं। इस प्रकार के भ्रम की स्थिति से बचने के लिए इस टेक्निक का उपयोग किया जाता है। मुझे आशा है की आप इसे पसंद करेंगे!
avi.elkharrat

लेकिन जो मुझे भ्रमित करता है वह है !! 'असत्य' सत्य के बराबर है। सिर्फ इस मामले के कारण, मैं इस टेक्निक का उपयोग नहीं कर सकता।
पॉल च्यूंग

!!'false'विलेख में है trueक्योंकि 'false'एक वैध स्ट्रिंग है
avi.elkharrat

इसलिए यह टेक्निक इस केस को कवर नहीं कर सकता है, या कोई हल है?
पौल १२'१

16

के लिए Typescript 2.x.xआप एक निम्नलिखित तरीके से यह करना चाहिए (का उपयोग करते हुए प्रकार गार्ड ):

tl; डॉ

function isDefined<T>(value: T | undefined | null): value is T {
  return <T>value !== undefined && <T>value !== null;
}

क्यों?

इस तरह isDefined()से वेरिएबल के प्रकार का सम्मान किया जाएगा और निम्न कोड को इस चेक को ध्यान में रखना होगा।

उदाहरण 1 - मूल जाँच:

function getFoo(foo: string): void { 
  //
}

function getBar(bar: string| undefined) {   
  getFoo(bar); //ERROR: "bar" can be undefined
  if (isDefined(bar)) {
    getFoo(bar); // Ok now, typescript knows that "bar' is defined
  }
}

उदाहरण 2 - प्रकार सम्मान:

function getFoo(foo: string): void { 
  //
}

function getBar(bar: number | undefined) {
  getFoo(bar); // ERROR: "number | undefined" is not assignable to "string"
  if (isDefined(bar)) {
    getFoo(bar); // ERROR: "number" is not assignable to "string", but it's ok - we know it's number
  }
}

14
if(data){}

यह मतलब है! डेटा

  • शून्य
  • अपरिभाषित
  • असत्य
  • ....

2
और अगर डेटा बूलियन प्रकार का है?
२२:०४ पर :57ststigator

क्या आप दो चर मिला सकते हैं। अगर (value1 && value2) यह जांचने के लिए कि क्या दोनों अपरिभाषित हैं?
ARK

@ianstigator एक बूलियन का मूल्यांकन केवल trueया falseकेवल के रूप में किया जा सकता है । यदि आपके पास nullअसाइनमेंट या undefinedमूल्य के साथ बूलियन है , तो दोनों स्थितियों में मूल्य का मूल्यांकन किया जाएगा false
केबडेव

5

यदि आप टाइपस्क्रिप्ट का उपयोग कर रहे हैं, तो यह एक बेहतर तरीका है कि कंपाइलर को रन-टाइम पर चेक करने के बजाय नल और अपरिभाषित (या इसके बारे में संभावना) की जांच करने दें। (यदि आप रन-टाइम पर जांच करना चाहते हैं, तो जितने उत्तर इंगित करते हैं, बस उपयोग करेंvalue == null )।

strictNullChecksसंकलक को संभावित अशक्त या अपरिभाषित मानों पर विचार करने के लिए संकलन विकल्प का उपयोग करें । यदि आप इस विकल्प निर्धारित करते हैं, और फिर वहाँ एक स्थिति है जहाँ आप है करते अशक्त की अनुमति है और अपरिभाषित करना चाहते हैं, आप के रूप में प्रकार परिभाषित कर सकते Type | null | undefined


5

आप पास करना चाहते हैं tslintकी स्थापना के बिना strict-boolean-expressionsकरने के लिए allow-null-unionया allow-undefined-union, आप उपयोग करने की आवश्यकता isNullOrUndefinedसे nodeकी utilमॉड्यूल या अपने खुद के रोल:

// tslint:disable:no-null-keyword
export const isNullOrUndefined =
  <T>(obj: T | null | undefined): obj is null | undefined => {
    return typeof obj === "undefined" || obj === null;
  };
// tslint:enable:no-null-keyword

जब आपके tslint नियम सख्त होते हैं तो बिल्कुल संश्लिष्ट चीनी नहीं बल्कि उपयोगी होती है।


1

nullचेक के लिए एक तेज़ और छोटा अंकन हो सकता है:

value == null ? "UNDEFINED" : value

यह रेखा इसके बराबर है:

if(value == null) {
       console.log("UNDEFINED")
} else {
    console.log(value)
}

विशेष रूप से जब आपके पास बहुत अधिक nullचेक होता है तो यह एक अच्छा संक्षिप्त अंकन होता है।


1

मेरे पास यह मुद्दा था और कुछ जवाब के लिए काम करना ठीक है, JSलेकिन TSयहाँ के लिए कारण नहीं है।

//JS
let couldBeNullOrUndefined;
if(couldBeNullOrUndefined == null) {
  console.log('null OR undefined', couldBeNullOrUndefined);
} else {
  console.log('Has some value', couldBeNullOrUndefined);
}

यह सब अच्छा है क्योंकि JS का कोई प्रकार नहीं है

//TS
let couldBeNullOrUndefined?: string | null; // THIS NEEDS TO BE TYPED AS undefined || null || Type(string)

if(couldBeNullOrUndefined === null) { // TS should always use strict-check
  console.log('null OR undefined', couldBeNullOrUndefined);
} else {
  console.log('Has some value', couldBeNullOrUndefined);
}

टीएस में यदि वैरिएबल परिभाषित नहीं किया गया था nullजब आप उस nullके लिए जांच करने की कोशिश करते हैं tslint| कंपाइलर शिकायत करेंगे।

//tslint.json
...
"triple-equals":[true],
...
 let couldBeNullOrUndefined?: string; // to fix it add | null

 Types of property 'couldBeNullOrUndefined' are incompatible.
      Type 'string | null' is not assignable to type 'string | undefined'.
        Type 'null' is not assignable to type 'string | undefined'.

1

इस धागे में शामिल होने के लिए देर हो रही है, लेकिन मुझे यह जावास्क्रिप्ट हैक करने की जाँच में बहुत आसान है कि क्या कोई मान अपरिभाषित है

 if(typeof(something) === 'undefined'){
   // Yes this is undefined
 }

1

आमतौर पर मैं बाजीगरी-जांच करता हूं क्योंकि फेंटन पहले से ही चर्चा में है । इसे और अधिक पठनीय बनाने के लिए, आप उपयोग कर सकते isNil ramda से।

import * as isNil from 'ramda/src/isNil';

totalAmount = isNil(totalAmount ) ? 0 : totalAmount ;

1

एक क्रिया के रूप में, यदि आप केवल अशक्त और अपरिभाषित मूल्यों की तुलना करना चाहते हैं, तो संदर्भ के लिए निम्न उदाहरण कोड का उपयोग करें:

const incomingValue : string = undefined;
const somethingToCompare : string = incomingValue; // If the line above is not declared, TypeScript will return an excepion

if (somethingToCompare == (undefined || null)) {
  console.log(`Incoming value is: ${somethingToCompare}`);
}

यदि incomingValueघोषित नहीं किया गया है, तो टाइपस्क्रिप्ट को एक अपवाद वापस करना चाहिए। यदि यह घोषित है, लेकिन परिभाषित नहीं है, तोconsole.log() "आने वाला मूल्य है: अपरिभाषित"। ध्यान दें कि हम सख्त समान ऑपरेटर का उपयोग नहीं कर रहे हैं।

"सही" तरीका (विवरण के लिए अन्य उत्तरों की जांच करें), यदि incomingValueएक booleanप्रकार नहीं है , तो बस मूल्यांकन करें कि क्या इसका मूल्य सच है, यह निरंतर / चर प्रकार के अनुसार मूल्यांकन किया जाएगा। एक trueस्ट्रिंग का उपयोग स्ट्रिंग के रूप में स्पष्ट रूप से परिभाषित किया जाना है = ''प्रतिभाजन। यदि नहीं, तो इसका मूल्यांकन किया जाएगा false। आइए इसी संदर्भ का उपयोग करते हुए इस मामले की जाँच करें:

const incomingValue : string = undefined;
const somethingToCompare0 : string = 'Trumpet';
const somethingToCompare1 : string = incomingValue;

if (somethingToCompare0) {
  console.log(`somethingToCompare0 is: ${somethingToCompare0}`); // Will return "somethingToCompare0 is: Trumpet"
}

// Now, we will evaluate the second constant
if (somethingToCompare1) {
  console.log(`somethingToCompare1 is: ${somethingToCompare1}`); // Launched if incomingValue is defined
} else {
  console.log(`somethingToCompare1 is: ${somethingToCompare1}`); // Launched if incomingValue is undefined. Will return "somethingToCompare1 is: undefined"
}

someToCompare == (अपरिभाषित || अशक्त) (अपरिभाषित || अशक्त) अशक्त करने के लिए हल करता है, तो यह कुछ के बीच एक ढीला तुलना है
TComCompare

@carlosvini ज़रूर, तुलना का बिंदु क्रिया है और संदर्भ के लिए एक कोड प्रदान करना है। यह गैर-सख्त बराबरी का कारण है। उत्तर का उद्देश्य स्पष्ट और खोजपूर्ण होना है। मैं भ्रम से बचने के लिए पाठ को संपादित करूँगा
केबीडे


0

सब,

सबसे अधिक वोट के साथ जवाब, वास्तव में काम नहीं करता है यदि आप किसी वस्तु के साथ काम कर रहे हैं। उस स्थिति में, यदि कोई संपत्ति मौजूद नहीं है, तो चेक काम नहीं करेगा। और हमारे मामले में यह मुद्दा था: इस नमूने को देखें:

var x =
{ name: "Homer", LastName: "Simpson" };

var y =
{ name: "Marge"} ;

var z =
{ name: "Bart" , LastName: undefined} ;

var a =
{ name: "Lisa" , LastName: ""} ;

var hasLastNameX = x.LastName != null;
var hasLastNameY = y.LastName != null;
var hasLastNameZ = z.LastName != null;
var hasLastNameA = a.LastName != null;



alert (hasLastNameX + ' ' + hasLastNameY + ' ' + hasLastNameZ + ' ' + hasLastNameA);

var hasLastNameXX = x.LastName !== null;
var hasLastNameYY = y.LastName !== null;
var hasLastNameZZ = z.LastName !== null;
var hasLastNameAA = a.LastName !== null;

alert (hasLastNameXX + ' ' + hasLastNameYY + ' ' + hasLastNameZZ + ' ' + hasLastNameAA);

परिणाम:

true , false, false , true (in case of !=)
true , true, true, true (in case of !==) => so in this sample not the correct answer

plunkr लिंक: https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE


यह अच्छी परीक्षा नहीं है। उन मूल्यों में से कोई भी कड़ाई से नहीं हैंnull । इसे आज़माएँ: plnkr.co/edit/NfiVnQNes1p8PvXd1fCG?p=preview
simonhamp

0

चूंकि टाइपस्क्रिप्ट ES6 जावास्क्रिप्ट का टाइप किया हुआ सुपरसेट है। और लॉशश जावास्क्रिप्ट की एक लाइब्रेरी है।

अगर मूल्य शून्य या अपरिभाषित है, तो जांच के लिए लॉश का उपयोग करना _.isNil()

_.isNil(value)

तर्क

मूल्य (*): चेक करने का मान।

रिटर्न

(बूलियन) : यदि मूल्य शून्य है, तो और गलत है।

उदाहरण

_.isNil(null);
// => true

_.isNil(void 0);
// => true

_.isNil(NaN);
// => false

संपर्क

लोदाश डॉक्स


1
यह विधि -2 क्यों है? लोदाश टाइप स्क्रिप्ट के साथ अच्छा नहीं है?
थॉमस पॉइजनेंट

0

सावधान यदि आप स्थानीय भंडारण का उपयोग कर रहे हैं, तो आप अपरिभाषित मूल्य के बजाय अपरिभाषित स्ट्रिंग के साथ समाप्त कर सकते हैं:

localStorage.setItem('mykey',JSON.stringify(undefined));
localStorage.getItem('mykey') === "undefined"
true

लोगों को यह उपयोगी लग सकता है: https://github.com/angular/compenders/blob/master/src/cdk/coercion/boolean-property.spec.ts

/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */

/** Coerces a data-bound value (typically a string) to a boolean. */
export function coerceBooleanProperty(value: any): boolean {
  return value != null && `${value}` !== 'false';
}

import {coerceBooleanProperty} from './boolean-property';

describe('coerceBooleanProperty', () => {

  it('should coerce undefined to false', () => {
    expect(coerceBooleanProperty(undefined)).toBe(false);
  });

  it('should coerce null to false', () => {
    expect(coerceBooleanProperty(null)).toBe(false);
  });

  it('should coerce the empty string to true', () => {
    expect(coerceBooleanProperty('')).toBe(true);
  });

  it('should coerce zero to true', () => {
    expect(coerceBooleanProperty(0)).toBe(true);
  });

  it('should coerce the string "false" to false', () => {
    expect(coerceBooleanProperty('false')).toBe(false);
  });

  it('should coerce the boolean false to false', () => {
    expect(coerceBooleanProperty(false)).toBe(false);
  });

  it('should coerce the boolean true to true', () => {
    expect(coerceBooleanProperty(true)).toBe(true);
  });

  it('should coerce the string "true" to true', () => {
    expect(coerceBooleanProperty('true')).toBe(true);
  });

  it('should coerce an arbitrary string to true', () => {
    expect(coerceBooleanProperty('pink')).toBe(true);
  });

  it('should coerce an object to true', () => {
    expect(coerceBooleanProperty({})).toBe(true);
  });

  it('should coerce an array to true', () => {
    expect(coerceBooleanProperty([])).toBe(true);
  });
});

-4

मैं हमेशा इसे इस तरह लिखता हूं:

var foo:string;

if(!foo){
   foo="something";    
}

यह ठीक काम करेगा और मुझे लगता है कि यह बहुत पठनीय है।


21
संख्याओं के लिए काम नहीं करेगा क्योंकि परीक्षण 0भी पास करता !fooहै।
hasen

10
बूलियन के लिए भी काम नहीं करता है, जहां undefinedसे अलग है false। यह वैकल्पिक बूलियन फ़ंक्शन मापदंडों के साथ बहुत आम है, जहां आपको सामान्य जावास्क्रिप्ट दृष्टिकोण का उपयोग करना चाहिए:function fn(flag?: boolean) { if (typeof flag === "undefined") flag = true; /* set default value */ }
मिंगी

मल के लिए ठीक काम करने लगता है var isTrue; if(isTrue)//skips, if(!isTrue)// enters if(isTrue === undefined)//enters:। यह भी टाइपस्क्रिप्ट में कोशिश की var isTrue:boolean, जिसके साथ अपरिभाषित था, और अगर जाँच करता है। @ जी, क्या आपने जो कोशिश की और जो मैंने कोशिश की उसके बारे में कुछ अलग है?
दनाई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.