javascript - Typescript tür dönüştürme D3.js DefaultArcObject


Şu anda bu paketten yüklenen tür tanımlarını kullanıyorum. Kodu, D3.js tarafından oluşturulan arc kullanarak bir path öğesinin d SVG özniteliğini ayarlamaya çalışıyor.

Kodum aşağıdaki gibi görünüyor:

const pie = d3.pie<SomeDataInterface>()
        .value((d) => d.dataVal);

const arc = g.selectAll(".arc")
        .data(pie(mockData));

const path = d3.arc();

arc.append("path")
        .attr("d", path); // >> Where compilation fails

Ancak, bu derleme hatasını alıyorum:

TypeScript error: Argument of type 'Arc<any, DefaultArcObject>' is not assignable to parameter of type 'ValueFn<SVGPathElement, PieArcDatum<ID3Data>, string | number | boolean | null>'.
  Types of parameters 'd' and 'datum' are incompatible.

Örneğe buradan baktığımda, path tanımında sadece bir <any> tipi bildirilebileceğini görüyorum. Benzer şekilde, gerçekte tip tanımını içeren Arc tip tanımını import { Arc } from "d3-shape"; kullanarak içe aktarmayı da denedim ve bunu şu şekilde atadım:

.attr("d", <Arc>path)

ki bu da derleme uyarıları alıyor. Hangi tür dönüşümünü kaçırıyor olabileceğim ve özellikle nerede olduğuna dair bir fikriniz var mı?

Güncelle

Bu kod parçası, burada gösterilen örnek üzerinden çalışıyor.

Cevap #1

Sorunun sorulmasından bu yana üç yıl geçmiş olmasına rağmen, daha sonra gelenlere yardımcı olmak amacıyla çözümü burada paylaşmak istiyorum.

Bu problemi çözmek için, d3.arc'ın genel parametresini değiştirmemiz gerekiyor. Varsayılan olarak veri tipimizin SomeDataInterface olduğunu düşünürsek, genel parametre şöyle yazılmalıdır:

d3.arc<d3.PieArcDatum<SomeDataInterface>>()

Anahtar, veri tipimizi sarmak için d3.PieArcDatum<> kullanmaktır.

İlgili makaleler