d3.js - Jeg har en feil når jeg bruker d3.extent i TypeScript (TS2345)


Jeg tester d3-eksempler, men jeg har en feil.

ps. Jeg løste denne feilen. Men ikke vakkert.

        const xextent = d3.extent(data, (d) => d.x);
        const x = d3
            .scaleLinear()
            .domain([xextent[0] ?? 0, xextent[1] ?? 0])
            .nice()
            .range([margin.left, width - margin.right]);

Svar #1

Du kan enten sette standarden når du destrukturerer arrayen

let [min = 0, max = 140] = d3.extent(data.map((d) => d[0]));
let xScale = d3.scaleLinear().domain([min, max]).range([0, width]);

Eller kast det inline hvis du er sikker på at dataene ikke er udefinerte. Dette ser ryddigere ut visuelt.

let yScale = d3
  .scaleLinear()
  .domain(d3.extent(data.map((d) => d[1])) as [number, number]) // <--
  .range([0, height]);

Svar #2

du kan sette inn en sjekk mellom å beregne omfanget og å sende det til domene-funksjonen, slik som dette

const domain = d3.extent([1, 2, 3], (d) => d);
if (!domain[0] || !domain[1]) {
  throw new Error("found unexpected value while getting x scale");
}
return d3
  .scaleLinear()
  .domain(domain)
  .range([margins.left, totalWidth - margins.right]);

Relaterte artikler