Отказ от ответственности: я новичок в Typescript. Не стесняйтесь ссылаться на документы, чтобы узнать больше. Я рассмотрел ошибки изолированно (вне контекста d3), но эти решения не исправили их.
У меня есть миксин:
import Vue from 'vue';
import { Component, Mixin, Mixins } from 'vue-mixin-decorator';
import { Prop } from 'vue-property-decorator';
import CoreMixin from './core';
import * as d3 from 'd3';
@Mixin
export default class BandAxis extends Mixins<CoreMixin>(CoreMixin) {
// relevant props
@Prop({}) private sizeTo!: string;
@Prop({default: () => ( ['one', 'two', 'three'] )}) private labels!: string[];
// lots of other props props
// relevant code
get scale() {
return d3.scaleBand()
.domain(this.labels)
.rangeRound([0, this.width])
.padding(0.1);
}
get axis() {
return d3.axisBottom()
.scale(this.scale)
.ticks(this.labels.length);
}
private bbox() {
const sel = d3.select(`#${this.sizeTo}`);
if (sel.empty()) {
return {
width: 0,
height: 0,
};
} else {
return sel.node().getBoundingClientRect();
}
}
// more stuff that isn't related
}
Использование этого дает мне:
Expected 1 arguments, but got 0.
get axis() {
> return d3.axisBottom()
а также:
Object is possibly 'null'.
| };
| } else {
> | return sel.node().getBoundingClientRect();
| ^
| }
| }
Есть идеи?
Первое сообщение указывает, что в вызове d3.axisBottom
отсутствует аргумент. Это ожидает AxisScale<Domain>
аргумент.
Второе сообщение предупреждает вас, что sel
может быть null
. Это рассматривается как ошибка при компиляции с включенным --strictNullChecks
(или --strict
). Чтобы решить эту проблему, вы можете:
strictNullCheck
(не рекомендуется)null
-чек для sel
: if (sel) { /* use sel */ }
sel!.node().getBoundingClientRect()