首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >劫持新呼叫

劫持新呼叫
EN

Stack Overflow用户
提问于 2015-03-31 20:00:01
回答 1查看 83关注 0票数 1

我在TypeScript中有一个类,这很好。我想截获对new T(...)的调用,这样就不会调用默认机制,而是从任意函数调用(它具有与T完全不同的返回类型)中返回值。

我尝试了像new() : OtherT { return func(); }这样的东西,TS没有错误地接受它,但在编译new T()时仍然坚持返回的类型是T

我怎样才能说服TypeScript用我自己的函数代替new T()呢?我真的需要一个解决方案,它可以放在T的基类上,而不是T本身。

EN

回答 1

Stack Overflow用户

发布于 2015-04-01 06:25:36

我如何才能说服TypeScript用我自己的函数替换新的T()

这被认为是非常糟糕的做法。如果您在一个函数上调用new,您希望它返回一些正确设置了constructor属性以指向该函数的内容。

这就是为什么TypeScript类要求在使用new调用时,它们将返回该类的实例。

然而,如果你想要一个工厂函数,或者为现有的糟糕的JS库创建类型定义,TypeScript将允许你这样做,例如:

代码语言:javascript
复制
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 number
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29368152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档