अपडेट 2019-05-15 (बेहतर कोड पैटर्न वैकल्पिक के रूप में)
const
अधिक कार्यात्मक कोड से उपयोग और लाभ के कई वर्षों के बाद , मैं ज्यादातर मामलों में नीचे का उपयोग करने के खिलाफ सुझाऊंगा। (जब वस्तुओं का निर्माण करते हैं, तो टाइप सिस्टम को एक विशेष प्रकार में मजबूर करने के बजाय यह अनुमान लगाने के लिए कि अक्सर यह संकेत होता है कि कुछ गलत है)।
इसके बजाय मैं const
जितना संभव हो चर का उपयोग करने की सलाह दूंगा और फिर अंतिम चरण के रूप में वस्तु की रचना करूंगा :
const id = GetId();
const hasStarted = true;
...
const hasFinished = false;
...
return {hasStarted, hasFinished, id};
- यह स्पष्ट टाइपिंग की आवश्यकता के बिना सब कुछ ठीक से टाइप करेगा।
- फ़ील्ड नामों को फिर से टाइप करने की कोई आवश्यकता नहीं है।
- यह मेरे अनुभव से सबसे साफ कोड की ओर जाता है।
- यह कंपाइलर को अधिक राज्य सत्यापन प्रदान करने की अनुमति देता है (उदाहरण के लिए, यदि आप कई स्थानों पर लौटते हैं, तो कंपाइलर यह सुनिश्चित करेगा कि एक ही प्रकार की वस्तु हमेशा लौटा दी जाए - जो आपको प्रत्येक स्थिति में संपूर्ण वापसी मूल्य घोषित करने के लिए प्रोत्साहित करती है - पूरी तरह से स्पष्ट उस मूल्य का आशय)।
जोड़ 2020-02-26
यदि आपको वास्तव में एक प्रकार की आवश्यकता है जिसे आप आलसी रूप से आरंभीकृत कर सकते हैं: निशान यह एक अशक्त संघ प्रकार (अशक्त या प्रकार) है। प्रकार प्रणाली आपको यह सुनिश्चित करने के बिना इसका उपयोग करने से रोकेगी कि इसका मूल्य क्या है।
में tsconfig.json
, सुनिश्चित करें कि आप सख्त नल जाँच सक्षम करें:
"strictNullChecks": true
फिर इस पैटर्न का उपयोग करें और आपको आकस्मिक नल / अपरिभाषित पहुंच से बचाने के लिए प्रकार प्रणाली की अनुमति दें:
const state = {
instance: null as null | ApiService,
// OR
// instance: undefined as undefined | ApiService,
};
const useApi = () => {
// If I try to use it here, the type system requires a safe way to access it
// Simple lazy-initialization
const api = state?.instance ?? (state.instance = new ApiService());
api.fun();
// Also here are some ways to only access it if it has value:
// The 'right' way: Typescript 3.7 required
state.instance?.fun();
// Or the old way: If you are stuck before Typescript 3.7
state.instance && state.instance.fun();
// Or the long winded way because the above just feels weird
if (state.instance) { state.instance.fun(); }
// Or the I came from C and can't check for nulls like they are booleans way
if (state.instance != null) { state.instance.fun(); }
// Or the I came from C and can't check for nulls like they are booleans
// AND I was told to always use triple === in javascript even with null checks way
if (state.instance !== null && state.instance !== undefined) { state.instance.fun(); }
};
class ApiService {
fun() {
// Do something useful here
}
}
99% मामलों में नीचे न करें:
अपडेट 2016-02-10 - TSX को हैंडल करने के लिए (धन्यवाद @ जोश)
as
TSX के लिए ऑपरेटर का उपयोग करें ।
var obj = {
property: null as string
};
एक लंबा उदाहरण:
var call = {
hasStarted: null as boolean,
hasFinished: null as boolean,
id: null as number,
};
मूल उत्तर
इस रसीले को बनाने के लिए कास्ट ऑपरेटर का उपयोग करें (वांछित प्रकार के नल को कास्टिंग करके)।
var obj = {
property: <string> null
};
एक लंबा उदाहरण:
var call = {
hasStarted: <boolean> null,
hasFinished: <boolean> null,
id: <number> null,
};
यह दो भागों (एक प्रकार घोषित करने के लिए, दूसरे को चूक घोषित करने के लिए) से बेहतर है:
var callVerbose: {
hasStarted: boolean;
hasFinished: boolean;
id: number;
} = {
hasStarted: null,
hasFinished: null,
id: null,
};