Error on type inference inside an IF and arrow function when using --scrictNullChecks · Issue #19606 · microsoft/TypeScript (original) (raw)
TypeScript Version: 2.7.0-dev.20171031
Code
declare function f(a: string, c: string): void;
function f2(a?: string, b?: string[]): void { if (a && b) { b.forEach( //b: string[] c => f(a, c) //a: string (OK) ); } }
function f3(a: string|undefined, b: string[]|undefined): void { if (a && b) { b.forEach( //b: string[] c => f(a, c) //a: string (OK) ); } }
function f4(x: any): void { let a: string|undefined = x.getA(); let b: string[]|undefined = x.getB(); if (a && b) { b.forEach( //b: string[] c => f(a, c) //a: string|undefined (should be just string) ); } }
function f5(x: any): void { let a: string|undefined = x.getA(); let b: string[]|undefined = x.getB(); if (a && b) { f(a, b[0]) //a: string (OK) } }
function f6(x: any): void { let a: string|undefined = x.getA(); let b: string[]|undefined = x.getB(); if (a) { let d: string = a.toLowerCase();//a: string (OK) if (b) { b.forEach( //b: string[] c => f(a, c) //a: string|undefined (should be just string) ); } } }
Expected behavior:
No error, a: string|undefined
should be string
inside a if (a && b)
Actual behavior:
error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.