Closed
Description
Bug Report
π Search Terms
string.split undefined
π Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about string.split
β― Playground Link
π» Code
const [a,b] = "hello".split('@');
console.log([a,b]); // b is typed as string, but it can be undefined. a, on the other hand, is guaranteed to be string and not undefined.
// If b is passed to a function that strictly expects valid string, we get a runtime error.
// Compiler should have prevented it by detecting that b can be string|undefined.
console.log(foo(a,b));
function foo(a:string, b:string) {
return a.length + b.length;
}
π Actual behavior
Variable b
is typed as string
, when it can have an undefined
value. Correct type would be string | undefined
, so compiler can detect if it is being incorrectly passed to a function that strictly expects a valid string value.
π Expected behavior
String.split() return type should be [string, ...(string | undefined)[]]
to be correct.
This would be breaking change for programs using strict checks, but it will help catch unexpected undefined values being passed around.
Current workaround is to fix the type on every split() call:
const [a,b] = "hello".split('@') as [string, ...(string | undefined)[]];
The compiler will then flag invalid calls using b
as string.
Playground Link