Прошу прощения за, может быть, скучный вопрос, но я изучаю машинопись и столкнулся с ситуацией, которую не могу преодолеть.
Я использую Victory диаграммы, где компонент принимает данные типа DomainPropType
. Поэтому я скачал и установил @ types / victory , чтобы использовать этот тип.
После этого можно передавать данные в компонент.
Но ...
// unimportant code was striped out
import { DomainPropType } from 'victory';
class Charts extends Component<Props, State> {
private entireDomain: DomainPropType;
public constructor(props: Props) {
super(props);
this.entireDomain = this.getEntireDomain();
console.log(this.entireDomain); // <= got {x:[82800000, 1206000000] ,y: [0, 1]}
console.log(this.entireDomain.x); // <= got 'Property 'x' does not exist on type 'DomainPropType'.
}
public getEntireDomain(): DomainPropType {
const xValues = this.entireDataSet.map((item: DataSetItem) => item.x);
const yValues = this.entireDataSet.map((item: DataSetItem) => item.y);
return {
x: [xValues[0].valueOf(), xValues[xValues.length - 1].valueOf()],
y: [Math.min(...yValues), Math.max(...yValues)]
};
}
}
В первом файле console.log ясно видно, что entireDomain
- это объект с ключом x
. Так почему во втором console.log typeScript выбрасывает следующую ошибку?
Property 'x' does not exist on type 'DomainPropType'.
Property 'x' does not exist on type '[number, number]'.
Хорошо, это также говорит [number, number]
. Однако вот как выглядит тип:
Если я правильно понимаю ... DomainPropType также может иметь тип { x?: DomainTuple; y: DomainTuple; }
. Тогда почему typeScript выбрал неправильный для проверки? Пожалуйста, кто-нибудь объяснит мне.