no-inferrable-types
)Explicit types where they can be easily inferred may add unnecessary verbosity.
This rule disallows explicit type declarations on parameters, variables and properties where the type can be easily inferred from its value.
This rule accepts the following options:
interface Options { ignoreParameters?: boolean; ignoreProperties?: boolean; }
The default options are:
{ "ignoreParameters": false, "ignoreProperties": false, }
With these options, the following patterns are valid:
const a = 10n; const a = -10n; const a = BigInt(10); const a = -BigInt(10); const a = false; const a = true; const a = Boolean(null); const a = !0; const a = 10; const a = +10; const a = -10; const a = Number('1'); const a = +Number('1'); const a = -Number('1'); const a = Infinity; const a = +Infinity; const a = -Infinity; const a = NaN; const a = +NaN; const a = -NaN; const a = null; const a = /a/; const a = RegExp('a'); const a = new RegExp('a'); const a = 'str'; const a = `str`; const a = String(1); const a = Symbol('a'); const a = undefined; const a = void someValue; class Foo { prop = 5; } function fn(a = 5, b = true) {} function fn(a: number, b: boolean, c: string) {}
The following are invalid:
const a: bigint = 10n; const a: bigint = -10n; const a: bigint = BigInt(10); const a: bigint = -BigInt(10); const a: boolean = false; const a: boolean = true; const a: boolean = Boolean(null); const a: boolean = !0; const a: number = 10; const a: number = +10; const a: number = -10; const a: number = Number('1'); const a: number = +Number('1'); const a: number = -Number('1'); const a: number = Infinity; const a: number = +Infinity; const a: number = -Infinity; const a: number = NaN; const a: number = +NaN; const a: number = -NaN; const a: null = null; const a: RegExp = /a/; const a: RegExp = RegExp('a'); const a: RegExp = new RegExp('a'); const a: string = 'str'; const a: string = `str`; const a: string = String(1); const a: symbol = Symbol('a'); const a: undefined = undefined; const a: undefined = void someValue; class Foo { prop: number = 5; } function fn(a: number = 5, b: boolean = true) {}
ignoreParameters
When set to true, the following pattern is considered valid:
function foo(a: number = 5, b: boolean = true) { // ... }
ignoreProperties
When set to true, the following pattern is considered valid:
class Foo { prop: number = 5; }
If you do not want to enforce inferred types.
TypeScript Inference
TSLint: no-inferrable-types