2013-05-10 46 views
0

我下载Kinetic.d.ts从Kinectic.d.tskinetic.d.ts的插件标签丢失

它遗漏标签插件,所以我试图创建它。

我创建:

class Label extends Group 
{ 
    constructor(config: LabelConfig); 
    setText(text: Text); 
    getText(): Text; 
    setRect(rect: LabelRect); 
    getRect(): LabelRect; 
} 

class LabelRect extends Shape 
{ 
    constructor(config: LabelRectConfig); 
    setPointerDirection(pointerDirection: string); 
    setPointerWidth(pointerWidth: number); 
    setPointerHeight(pointerHeight: number); 
    setCornerRadius(cornerRadius: number); 
    getPointerDirection(): string; 
    getPointerWidth(): number; 
    getPointerHeight(): number; 
    getCornerRadius(): number; 
} 

interface LabelConfig extends DrawOptionsConfig, ObjectOptionsConfig 
{ 
    rect: LabelRect; 
    text: Text; 
} 

interface LabelRectConfig extends DrawOptionsConfig, ObjectOptionsConfig 
{ 
    pointerDirection?: string; 
    pointerWidth?: number; 
    pointerHeight?: number; 
    cornerRadius?: number; 
} 

我得到这个错误(我格式化错误读取目的):

Error 1 Supplied parameters do not match any signature of call target: 
Could not apply type 'LabelConfig' to argument 1, which is of type 
'{ 
    x: number; 
    y: number; 
    opacity: number; 
    listening: bool; 
    text: 
    { 
     text: string; 
     fontFamily: string; 
     fontSize: number; 
     padding: number; 
     fill: string; 
    }; 
    rect: 
    { 
     fill: string; 
     pointerDirection: string; 
     pointerWidth: number; 
     pointerHeight: number; 
     lineJoin: string; 
    }; 
}' 

我实例化的标签,如:

var labelNumerator = new Kinetic.Label(
    { 
     x: LEFT_MARGIN + numerator.getTextWidth() + 50, 
     y: numerator.getY() + 5, 
     opacity: 0.75, 
     listening: false, 
     text: { 
      text: 'Numerator', 
      fontFamily: FONT, 
      fontSize: LABEL_FONT_SIZE, 
      padding: LABEL_PADDING, 
      fill: LABEL_TEXT_COLOR 
     }, 
     rect: { 
      fill: LABEL_BACKGROUND_COLOR, 
      pointerDirection: 'left', 
      pointerWidth: LABEL_FONT_SIZE + LABEL_PADDING * 2, 
      pointerHeight: LABEL_FONT_SIZE + LABEL_PADDING * 2, 
      lineJoin: 'round' 
     } 
    } 
); 

我错过了什么?

+0

比较的是输入您已声明的接口时,我看不出什么毛病,所以也许你错过了所需的这些接口的一个'LabelConfig'或'LabelRect'或'Text'延伸的特性。一种检查方式可能是创建一个虚拟类,它实现''LabelConfig'',看看编译器是否指出了一些缺失的属性(你可能需要深入研究'LabelRect'和'Text'。 – JcFx 2013-05-10 19:25:19

回答

0

基本上你很困惑类与接口。配置对象需要是一个接口,因为它只是一个属性包(没有实现即函数)。您需要使用Config对象而不是类。

只要你宣布以下为一类:

class LabelRect extends Shape 
{ 
    constructor(config: LabelRectConfig); 
    setPointerDirection(pointerDirection: string); 
    setPointerWidth(pointerWidth: number); 
    setPointerHeight(pointerHeight: number); 
    setCornerRadius(cornerRadius: number); 
    getPointerDirection(): string; 
    getPointerWidth(): number; 
    getPointerHeight(): number; 
    getCornerRadius(): number; 
} 

你就错了路。由于LabelRect由您配置的接口需要:

interface LabelConfig extends DrawOptionsConfig, ObjectOptionsConfig 
{ 
    rect: LabelRect; 

这意味着调用构造函数时需要提供所有这些功能(以及那些在基类):

constructor(config: LabelConfig); 

你需要看看在文档中找出如何在合适的地方使用只需接口。

以下工作但可能不正确,阅读文档(特别是对的setRect/getRect):

/// <reference path="kinetic.d.ts" /> 

declare module Kinetic { 

    class Label extends Group { 
     constructor(config: LabelConfig); 
     setText(text: Text); 
     getText(): Text; 
     setRect(rect: LabelRectConfig); 
     getRect(): LabelRectConfig; 
    } 

    class LabelRect extends Shape { 
     constructor(config: LabelRectConfig); 
     setPointerDirection(pointerDirection: string); 
     setPointerWidth(pointerWidth: number); 
     setPointerHeight(pointerHeight: number); 
     setCornerRadius(cornerRadius: number); 
     getPointerDirection(): string; 
     getPointerWidth(): number; 
     getPointerHeight(): number; 
     getCornerRadius(): number; 
    } 

    interface LabelRectConfig extends RectConfig{ 

    } 

    interface LabelConfig extends DrawOptionsConfig, ObjectOptionsConfig 
    { 
     rect: LabelRectConfig; 
     text: TextConfig; 
    } 

    interface LabelRectConfig 
    { 
     pointerDirection?: string; 
     pointerWidth?: number; 
     pointerHeight?: number; 
     cornerRadius?: number; 
    } 
} 


var labelNumerator = new Kinetic.Label(
    { 
     x: LEFT_MARGIN + numerator.getTextWidth() + 50, 
     y: numerator.getY() + 5, 
     opacity: 0.75, 
     listening: false, 
     text: { 
      text: 'Numerator', 
      fontFamily: FONT, 
      fontSize: LABEL_FONT_SIZE, 
      padding: LABEL_PADDING, 
      fill: LABEL_TEXT_COLOR 
     }, 
     rect: { 
      fill: LABEL_BACKGROUND_COLOR, 
      pointerDirection: 'left', 
      pointerWidth: LABEL_FONT_SIZE + LABEL_PADDING * 2, 
      pointerHeight: LABEL_FONT_SIZE + LABEL_PADDING * 2, 
      lineJoin: 'round', 
      width: 999, // Need to specify as not optional 
      height: 999, // Need to specify as not optional 
     } 
    } 
    ); 
0

BASarat

感谢响应。在阅读您的评论后,我实施了您的建议。不幸的是,它仍然没有工作。在进一步排除故障之后,我发现我使用的Kinectic.d.ts有一个字符串Kinetic.Text.padding。

padding?: string; 

我回顾了Kinetic的Text.js文件,它将填充数字设置为默认值。

Kinetic.Node.addGetterSetter(Kinetic.Text, 'padding', 0); 

所以我改变了TextConfig从填充?:字符串;到

0

哎呀....我意外提交没有完成我的答案...

因此,我改变TextConfig从

padding?: string; 

padding? number; 

这似乎解决这个问题。

我对您建议的代码做了一些小改动。

class Label extends Group 
{ 
    constructor(config: LabelConfig); 
    setText(text: TextConfig); 
    getText(): TextConfig; 
    setRect(rect: LabelRectConfig); 
    getRect(): LabelRectConfig; 
} 

interface LabelConfig extends DrawOptionsConfig, ObjectOptionsConfig 
{ 
    rect: LabelRectConfig; 
    text: TextConfig; 
} 

interface LabelRectConfig extends DrawOptionsConfig, ObjectOptionsConfig 
{ 
    width?: number; 
    height?: number; 
    pointerDirection?: string; 
    pointerWidth?: number; 
    pointerHeight?: number; 
    cornerRadius?: number; 
} 

这似乎工作。你怎么看?