safe-prop-getter
A tool to safely access the properties
Intro
Sometime the object or json has nested object properties. When trying to access a property from undefined, like:
const resFromServer = fruit: name: 'banana' color: 'yellow' ;const colorOfBanana = resFromServerfruitcolor; // 'yellow'const colorOfTomato = resFromServervegetablecolor; //Uncaught TypeError: Cannot read property 'color' of undefined// The following code will never be executed // some code to process tomato // some code to process banana
Instead, we manually check every object if it's undefined
if resFromServer && resFromServervegetable const colorOfTomato = resFromServervegetablecolor; // some code to process tomato else // handle no vegetable if resFromServer && resFromServerfruit const colorOfBanana = resFromServerfruitcolor; // some code to process banana else // handle no fruit
but if there are many nested properties, it will be very tedious to check them all
// what we want to do is just getting id from request objectif request && requestbody && requestbodyevent && requestbodyeventdata && requestbodyeventdatanew && equestbodyeventdatanewid else // handle no id here responsestatus = 400; responseerror = 'invalid request';
with safe-prop-getter, you can simplify your property check like this
const sp = ;// even if request is an empty object// sp.set(request).get('body.event.data.new.id').val is undefined, and no error will be thrownif spval
install
npm install safe-prop-getter
usage
basic
Javascript
const SafeProp = ;
Typescript
; ;; //Uncaught TypeError: Cannot read property 'request' of undefined; // undefined; // 'system'// you can use number as property; // 'user info update successful' // you can run function as wellsp.settestFuncObj.get'fruit.methods[0].log'.val'apple'; // console.log('apple');sp.settestFuncObj.get'fruit.methods[1].getAnother'.val; // 'banana'}
parameters
- mode: 'log' | 'strict' | 'default'(default value)
log
mode: errors will be logged with console.error, likesafeProp Error: Cannot read property request of undefined!
strict
mode: errors will be thrown with message, likesafeProp Error: Cannot read property request of undefined!
default
mode: no errors will be logged or thrown, just return undefined (or null, if you configurereturnEmptyType
);
const testObj = food: fruit: color: 'red' name: 'apple' ;const spDefaultMode = ; // or const spDefaultMode = new safeProp('any string not equal to log or strict');spDefaultModeval; // 'red'spDefaultModeval; // undefined const spLogMode = 'log'; // equal to const sp = new SafeProp(); sp.mode = 'log';spLogModeval; // 'red'spLogMode; // console.error('safeProp Error: Cannot read property color of undefined!'); const spStrictMode = 'strict'; // equal to const sp = new SafeProp(); sp.mode = 'log';spStrictModeval; // 'red'spStrictModeval; // throw new Error('safeProp Error: Cannot read property color of undefined!');
2.returnEmptyType: 'undefined'(default value) | 'null' | 'generic'
2.1 returnEmptyType: 'undefined'(default value)
const testObj = a: undefined b: null; const spReturnUndefined = ;const a = spReturnUndefinedval; // undefinedconst valueOfA = spReturnUndefinedval; // undefinedconst b = spReturnUndefinedval; // nullconst valueOfB = spReturnUndefinedval; // undefined
2.2 returnEmptyType: 'null'
const testObj = a: undefined b: null; const spReturnNull = 'default' 'null'; // equal to: const spReturnNull = new SafeProp(); spReturnNull.returnEmptyType = 'null';const a = spReturnNullval; // undefinedconst valueOfA = spReturnNullval; // nullconst b = spReturnNullval; // nullconst valueOfB = spReturnNullval; // null
2.3 returnEmptyType: 'generic'
const testObj = a: undefined b: null; const spReturnGeneric = 'default' 'generic'; // equal to: const spReturnGeneric = new SafeProp(); spReturnGeneric.returnEmptyType = 'generic';const a = spReturnGenericval; // undefinedconst valueOfA = spReturnGenericval; // undefinedconst b = spReturnGenericval; // nullconst valueOfB = spReturnGenericval; // null