2017-01-28 4 views
3

Я создаю линейную диаграмму с d3. Он работает, но машинописный код жалуются на собственность не существует в VS.Угловая ошибка типа 2 типа типа d3: свойство 'x' не существует в типе '[число, номер]'

Свойство «х» не существует на тип «[номер, номер]»

enter image description here

Глядя Ошибка. Кажется, что ожидаемая точка данных представляет собой массив с двумя числами.

Но я передаю объект. D3 должен поддерживать и то, и другое.

Кто-нибудь знает, как избавиться от этой ошибки без изменения моих данных?

+0

Как ваши данные выглядят? – toskv

ответ

6

Вот решение. Мне нужно использовать дженерики:

enter image description here

enter image description here

+0

hmmm вам не хватает типа данных. хорошо. принять ваш ответ и +1 с моей стороны :) –

0

его ошибка машинописи.

Я думаю, что в вашем доме нет собственности x. Вы можете попробовать это

return this.xScale(d?.x); 
return this.xScale(d?.y); 

или может быть ваш d есть данные, как этот ["x_value","y_value"] в числовом формате.

в этом случае вы должны попробовать

return this.xScale(d[0]); 
return this.yScale(d[1]); 

я надеюсь, что это поможет

+0

Это определение типа: export function line(): Line <[number, number]>; export function line (): Line ; https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/d3-shape/index.d.ts Я пытаюсь выяснить правильное использование для второго. – techguy2000

+0

ОК. понял. Мне нужно использовать d3.line () ... – techguy2000

0
The best way is use Typescript Optional operator (?). 

function buildName(firstName: string, lastName?: string) { 
    if (lastName) 
     return firenter code herestName + " " + lastName; 
    else 
     return firstName; 
} 

let result1 = buildName("Bob");     // works correctly now 
let result2 = buildName("Bob", "Adams", "Sr."); // error, too many parameters 
let result3 = buildName("Bob", "Adams"); // ah, just right 

Для получения более подробной информации https://www.typescriptlang.org/docs/handbook/functions.html

0

Как уже говорилось, это вопрос интерпретации машинопись. Я просто установил его с помощью скобок, чтобы получить доступ к свойству. Точно так же:

let line = d3.line() 
    .x(function (d) { 
    return x(d['date']); 
    }) 
    .y(function (d) { 
    return y(d['temp']); 
    }); 
Смежные вопросы