3

I have some TypeScript code that is being generated by a tool. I'd like to extend this class in another file. As of 0.9.1.1, what's the best way to go about this?

I thought maybe I could staple my additional functions onto the prototype, but this is giving various errors (which change depending what mood the compiler is in).

For example:

Foo.ts (generated by a tool)

module MyModule {
    export class Dog { }
}

Bar.ts

module MyModule {
    function bark(): string {return 'woof';}

    Dog.prototype.bark = bark;
}
4

2 回答 2

1

您不能在 TypeScript 中的多个文件之间拆分类定义。然而 typescript 理解 JavaScript 是如何工作的,并且可以让你编写 idomatic JavaScript 类就好了:

module MyModule {
     export function Dog(){};
}

module MyModule {
    function bark(): string {return 'woof';}
    Dog.prototype.bark = bark;
}

Try it online

解决此问题的一种方法是使用继承:

class BigDog extends Dog{
     bark(){}
}
于 2013-08-27T22:29:07.547 回答
0

我以前也遇到过你的问题,但我遇到了一些更深层次的问题。您可以从 basarat 的示例中看到,可以将简单函数添加为原型的扩展,但是当涉及到静态函数或其他静态值时,您可能想要扩展您的(可能是第三方)类,然后 TSC 会发出警告你,在类上没有静态定义这样的方法。

我的解决方法是以下小技巧:

module MyModule {
     export function Dog(){};
}

// in the other file
if (typeof MyModule !== 'undefined'){
    Cast<any>(MyModule.Dog).Create = ()=>{return new Dog();};
}

// where Cast is a hack, for TS to forcefully cast types :)
Cast<T>(element:any):T{ return element; } 

这应该将 MyModule.Dog 转换为任何对象,因此允许附加任何类型的属性、函数。

于 2014-05-12T19:58:25.173 回答