我正在使用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 {
...
}
}
答案 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?