Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Dotaz na pole v TypeScriptu

Ahoj,

chtěl bych vědět, jak upravit příklad, aby fungoval i za použití typescriptu.

Mám js knihovknu D3.js

A mám tento kód (pole):

var lineData = [{
    'x': 1,
    'y': 5
  }, {
    'x': 20,
    'y': 20
  }, {
    'x': 40,
    'y': 10
  }, {
    'x': 60,
    'y': 40
  }, {
    'x': 80,
    'y': 5
  }, {
    'x': 100,
    'y': 60
  }];

Dále toto pole používám v objektu:

var lineFunc = d3.svg.line()
  .x(function (d) {
    return xRange(d.x); // zde vrací X-ové hodnoty
  })

Ovšem v typescriptu hlásí:

Property 'x' does not exist on type '[number, number]'

Kompletní příklad mám tady: glLxK

Zkrátka jsem se trochu zasekl na tom, jak předat D3 data k zobrazení, pokud jde ještě o typescript.

Díky za návrhy.

Předmět Autor Datum
Co tohle? var lineData = [{ x: 1, y: 5 },…
Wikan 03.05.2016 18:00
Wikan
Deklaruj si typ, ktorý používaš v poli lineData: interface LineData { x: number; y: number; } Pole…
los 03.05.2016 18:05
los
Hmm, pravda: export function line(): Line<[number, number]>; export function line<T>(): Line<T>;
Wikan 03.05.2016 18:13
Wikan
Díky. Při nejbližší možnosti to nadeklaruju a potestuju. Pak dám vědět ;-) poslední
Flash_Gordon 03.05.2016 18:59
Flash_Gordon

Deklaruj si typ, ktorý používaš v poli lineData:

interface LineData {
	x: number;
	y: number;
}

Pole lineData potom bude vyzerať takto:

var lineData: LineData[] = [...]

A lineFunc bude vyzerať takto:

var lineFunc = d3.svg.line<LineData>()
  .x(function (d) {
    return xRange(d.x);
  })

Ak ťa netrápia typy a chceš len aby sa to dalo skompilovať, tak stačí použiť typ any:

var lineFunc = d3.svg.line<any>()
  .x(function (d) {
    return xRange(d.x);
  })

Zpět do poradny Odpovědět na původní otázku Nahoru