我在TypeScript中有一个类,这很好。我想截获对new T(...)的调用,这样就不会调用默认机制,而是从任意函数调用(它具有与T完全不同的返回类型)中返回值。
我尝试了像new() : OtherT { return func(); }这样的东西,TS没有错误地接受它,但在编译new T()时仍然坚持返回的类型是T。
我怎样才能说服TypeScript用我自己的函数代替new T()呢?我真的需要一个解决方案,它可以放在T的基类上,而不是T本身。
发布于 2015-04-01 06:25:36
我如何才能说服TypeScript用我自己的函数替换新的T()
这被认为是非常糟糕的做法。如果您在一个函数上调用new,您希望它返回一些正确设置了constructor属性以指向该函数的内容。
这就是为什么TypeScript类要求在使用new调用时,它们将返回该类的实例。
然而,如果你想要一个工厂函数,或者为现有的糟糕的JS库创建类型定义,TypeScript将允许你这样做,例如:
interface A {
foo: number;
}
interface B {
foo: string;
}
var OldLib: {
new (): A;
new (str:string): B;
}
var a = new OldLib();
a.foo = 123; // Is a string
var b = new OldLib('something');
b.foo = '123'; // Is a numberhttps://stackoverflow.com/questions/29368152
复制相似问题