If you try to assign an array you create to another array in Typescript, you can get an error like so:
let range: number[];
range = [
  brush.extent()[0], 
  brush.extent()[1]
];
E.g.:
(91,9): error TS2322: Type '(number | [number, number])[]' is not assignable to type 'number[]'.
  Type 'number | [number, number]' is not assignable to type 'number'.
    Type '[number, number]' is not assignable to type 'number'.
This is because the output of the type you’re assigning from is ambiguous (I’m using D3).
You can convince yourself of this by doing this:
range = [1, 2];
One way to fix this is to use the full type definition, if this helps you:
let range: [number, number] | [[number, number], [number, number]];
You can also fix this by adding type guards around the assignment:
       
const extent = brush.extent();
let first = extent[0];    
let second = extent[1];
if (typeof first === 'number' && typeof second === 'number') {          
  range = [first, second];
}    
This shows some unusual magic in Typescript – the type guard causes an implicit resolution of the type.