🐊Putout plugin adds ability to help with transforming code related to types.
npm i putout @putout/plugin-types -D
- ✅ apply-is-array;
- ✅ apply-number;
- ✅ convert-typeof-to-is-type;
- ✅ declare;
- ✅ remove-double-negations;
- ✅ remove-useless-conversion;
- ✅ remove-useless-constructor;
- ✅ remove-useless-typeof;
{
"rules": {
"types/apply-is-array": "on",
"types/apply-number": "on",
"types/declare": "on",
"types/convert-typeof-to-istype": "on",
"types/remove-useless-conversion": "on",
"types/remove-useless-constructor": "on",
"types/remove-double-negations": "on",
"types/remove-useless-typeof": "on"
}
}The
Numberconstructor contains constants and methods for working with numbers. Values of other types can be converted to numbers using theNumber()function(c) MDN
Checkout in 🐊Putout Editor.
const a = {
BooleanLiteral(node) {
return {
value: node.value ? 1 : 0,
};
},
};const a = {
BooleanLiteral(node) {
return {
value: Number(node.value),
};
},
};The
Array.isArray()method determines whether the passed value is anArray. When checking forArrayinstance,Array.isArray()is preferred overinstanceofbecause it works throughiframes.
x instanceof Array;const {isArray} = Array;
isArray(x);In case of using inline option:
{
"rules": {
"types/apply-is-array": ["on", {
"inline": true
}]
}
}Array.isArray will be inlined:
Array.isArray(x);Based on @putout/operator-declare.
Supported assertions:
isString;isSet;isEmptyString;isNumber;isNumberLike- checks ifacan be convert toNumberfromString;isFn;isBool;isObject;isUndefined;isSymbol;isNull;isBigInt;isArray;isEmptyArray;isError;isRegExp;
isString('hello');
isNumber('a' - 5);const isString = (a) => typeof a === 'string';
const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';
isString('hello');
isNumber('a' - 5);When you want to skip some declaration use dismiss:
{
"rules": {
"types/declare": ["on", {
"dismiss": ["isString"]
}]
}
}The
typeofoperator returns a string indicating the type of the unevaluated operand.(c) MDN
if (typeof a === 'boolean')
return x;const isBool = (a) => typeof a === 'boolean';
if (isBool(a))
return x;const a = !![1].includes(1);
const b = Boolean([1].includes(1));const a = [1].includes(1);Wrapper classes have surprising behaviour, such as
new Boolean(false)evaluating totrue.
🐊Putout plugin adds ability to remove useless constructor. Use with new/remove-useless.
const s = String('hello');
const b = Boolean(false);
const n = Number(5);const s = 'hello';
const b = false;
const n = 5;It is possible to use a couple of NOT operators (
!!) in series to explicitly force the conversion of any value to the corresponding boolean primitive. The conversion is based on the "truthyness" or "falsyness" of the value.The same conversion can be done through the
Booleanfunction.(c) MDN
if (!!a)
console.log('hi');if (a)
console.log('hi');The
typeofoperator returns a string indicating the type of the unevaluated operand.(c) MDN
typeof typeof 'hello';typeof 'hello';| Linter | Rule | Fix |
|---|---|---|
| 🐊 Putout | types |
✅ |
| ⏣ ESLint | no-implicit-coercion |
✅ |
MIT