From 6e375c953fc0fce89f2b28c641dbefe6065f97c5 Mon Sep 17 00:00:00 2001 From: Cristiano Aguzzi Date: Thu, 21 Sep 2023 11:14:15 +0200 Subject: [PATCH] docs(contributing): add a guide for checking of `undefined` or `null` --- CONTRIBUTING.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0cd2173a7..a48b7495a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -84,6 +84,27 @@ function startFoo() { error("This is an error message!"); } ``` +### Checking for `undefined` or `null` + +In node-wot, we enabled [strict boolean expressions](https://typescript-eslint.io/rules/strict-boolean-expressions/). In summary, this means that in the +the code base is not allowed to use non-boolean expressions where a boolean is expected (see the [examples](https://typescript-eslint.io/rules/strict-boolean-expressions/#examples)). +How then should the contributor deal with nullable variables? For example: +```ts +function(arg1: string | null | undefined) { + // ERROR: not allowed by strict-boolean-expressions + if(!arg) { throw new Error("arg should be defined!))} +} +``` +Instead of checking for both null and `undefiend` values (`if(arg !== undefined && arg !== null)`) the preferred solution is to use `!=` or `==` operator. Interestingly in JavaScript +with ==, null and undefined are only equal to each other. Example: +```ts +function(arg1: string | null | undefined) { + // OK + if(arg == null) { throw new Error("arg should be defined!))} +} +``` + +Further reading on the motivations can be found [here](https://basarat.gitbook.io/typescript/recap/null-undefined#checking-for-either). ## Commits