向现有Typedef文件添加定义

时间:2015-12-03 21:09:01

标签: typescript

我正在使用Typescript,我正在尝试将变量添加到另一个库(Babylonjs)。我知道在javascript中我可以自由地将任何变量添加到对象中,它会让我这样做。打字稿告诉我,我不能。我想它通知你的一部分快乐,但在这种情况下,我想要这样做。

例如:

var mesh = BABYLON.Mesh('name', scene);
mesh.myVariable = 'tada!';

现在myVariable不是BabylonJS Mesh类的一部分。如何添加一个typedef文件来说明,确定它是。 (每次我访问myVariable时,我都会检查它是否已设置)

我试过了:

declare module BABYLON{
  export interface Mesh {
    myVariable : any;
  }
}

和打字稿很友好让我知道重复的标识符'网格'。在Babylon typedef文件中,Mesh声明为:

declare module BABYLON {
  class Mesh extends AbstractMesh implements IGetSetVerticesData {
  ...
  }
}

1 个答案:

答案 0 :(得分:2)

要一次性动态添加内容,您可以执行以下操作:

(<any>mesh).myVariable = 'tada!';

您必须在任何想要阅读或写入的地方执行此操作。

您可能想要考虑的是您正在做的事情......使用新功能扩展对象。在typescript中,我通过定义一个新类来扩展我正在使用的类并添加新功能。类似的东西:

    module myModule {
      export class MyMesh extends BABYLON.Mesh {
        public var myVariable:string;
      }
    }

您现在可以编写getter和setter或添加新方法等。

如果要将输入的实例传递给需要原始实例的方法(BABYLON.Mesh),则必须相应地向下转换它:

someFunctionThatTakesMeshParam( <BABYLON.Mesh>myMesh );

这里还有一些讨论:How do I dynamically assign properties to an object in TypeScript?