我正在使用JointJS,它带有定义的类型。在那里,我有一个Typescript类定义如下:
namespace joint {
namespace shapes {
namespace devs {
class Model extends basic.Generic { ... }
}
}
}
namespace basic {
class Generic extends dia.Element { ... }
}
namespace dia {
class Element extends Cell { ... }
class Cell extends Backbone.Model { ... }
}
namespace Backbone {
class Model extends ModelBase {
...
defaults(): ObjectHash;
}
因此,最终,joint.shapes.devs.Model应该具有从Generic <- dia.Element <- dia.Cell <- Backbone.Model
继承的defaults属性
但是,当我尝试扩展该对象时:
const extendedModel = joint.shapes.devs.Model.extend(
...
), joint.shapes.devs.Model.defaults);
...打字稿说joint.shapes.devs.Model没有定义此属性:
error TS2339: Property 'defaults' does not exist on type 'typeof Model'.
我尝试调用方法而不是仅调用属性:
const extendedModel = joint.shapes.devs.Model.extend(
...
), joint.shapes.devs.Model.defaults());
但是我得到了相同的消息。
我正在使用打字稿2.7.2
我的问题是:这是怎么了?我该如何解决?
谢谢!
答案 0 :(得分:0)
在您尝试声明的状态下,defaults
属性不属于Model
类型,而是存在于Model
实例上,即存在于new Model
创建的对象上。没有实例,它们就毫无意义。
那么,让我们看一下extend()
方法的定义:
public static extend(properties: any, classProperties?: any): any;
因此,您正在将此变量作为classProperties
传递。该参数似乎反映了静态属性,即您可以通过extendedModel.propName
访问的属性。如果您不打算使用此语法,则可以将此参数留空,因为它是可选的。
最后,如果您熟悉ES6类,则似乎建议使用它们(通过定义中的注释)。在这种情况下,您的意图会这样表达:
class extendedModel extends joint.shapes.devs.Model {
// new properties go here
}