2015-09-27 31 views
6

dahil olmak üzere Typescript'e dönüştürme Bazı Javascript kodlarını Typescript'e dönüştürüyorum. Bu, d3 kullanan ve bir svg metin bloğunu mükemmel şekilde tamamlayan güzel bir Javascript işlevidir. Normalde "function" kelimesini "private" olarak değiştiririm ve işlev, Typecript'te olduğu gibi çalışır, ancak bu sadece getComputedTextLength() işleviyle ilgili şikayetçidir. Birisi kendim ve diğerleri için, bu hatayı alıyorum neden de dahil olmak üzere, bu yazı tipinin nasıl çalıştığını açıklayabilirse harika olur. Visual Studio yardım sağlamaz. Teşekkürler.Javascript işlevini getComputedTextLength()

function wrap(text, width) { 
    text.each(function() { 
     var text = d3.select(this), 
      words = text.text().split(/\s+/).reverse(), 
      word, 
      line = [], 
      lineNumber = 0, 
      lineHeight = 1.1, // ems 
      y = text.attr("y"), 
      x = text.attr("x"), 
      dy = parseFloat(text.attr("dy")), 
      tspan = text.text(null).append("tspan") 
       .attr("x", x).attr("y", y).attr("dy", dy + "em"); 
     while (word = words.pop()) { 
      line.push(word); 
      tspan.text(line.join(" ")); 
      if (tspan.node().getComputedTextLength() > width) { 
       line.pop(); 
       tspan.text(line.join(" ")); 
       line = [word]; 
       tspan = text.append("tspan") 
        .attr("x", x).attr("y", y) 
        .attr("dy", ++lineNumber * lineHeight + dy + "em") 
        .text(word); 
      } 
     } 
    }); 
} 
+0

Ve hata açıklaması nedir? – Buzinas

+0

Property 'getComputedTextLength', 'Element' türünde yok – blissweb

+0

Kod, Mike Bostock'dan https://bl.ocks.org/mbostock/7555321 – 0x4a6f4672

cevap

6

bir yolu iddiasını kullanmak olabilir (yani biz derleyici typescript söylemek - Burada türü döndürdü olduğunu bilmek).

while (word = words.pop()) { 
    line.push(word); 
    tspan.text(line.join(" ")); 
    if (tspan.node().getComputedTextLength() > width) { 

Biz bu 'SVGTSpanElement' ortak geliyor

while (word = words.pop()) { 
    line.push(word); 
    tspan.text(line.join(" ")); 
    var node: SVGTSpanElement = <SVGTSpanElement>tspan.node(); 
    var hasGreaterWidth = node.getComputedTextLength() > width; 
    if (hasGreaterWidth) { 

(örn burada o düğümü bekliyor SVGTSpanElement olmalıdır) de kullanabilir

: Yani bu çözüm Bunun yerine

olabilir lib.d.ts

+0

Sorunu kesin olarak düzeltir. :-) Sen bir süperstarsın. Çok teşekkürler. – blissweb

+0

Bunu görmek için harika! ;) Türlerin Keyfini Çıkarın, Efendim ... –

+0

Harika, teşekkürler! Ayrıca, çizgiyi sadece "var node = tspan.node(); ' – kolobok

İlgili konular