gpt4 book ai didi

typescript - 将定义添加到现有的 Typedef 文件

转载 作者:搜寻专家 更新时间:2023-10-30 21:43:06 25 4
gpt4 key购买 nike

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

例如:

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

现在 myVariable 不是 BabylonJS Mesh 类的一部分。我怎样才能添加一个 typedef 文件说,当然是。 (我一定会在每次访问 myVariable 时检查它是否已设置)

我试过:

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

typescript 很友好地让我知道重复标识符“Mesh”。在 Babylon typedef 文件中,Mesh 声明为:

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

最佳答案

要一次性动态添加一些东西,您可以这样做:

(<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?

关于typescript - 将定义添加到现有的 Typedef 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com