网站搜索

TypeScript:是否可以定义一个创建函数实例的类?


在 TypeScript 中,类有可能成为函数实例的构造函数吗?我设想的是这样的情况:

class SomeThing {
    (name: string) {
       // do something with name
    }
}

let thing = new SomeThing();
thing('John Doe');

答案#1

从技术上讲这是可能的(需要一些我在这里不会写的技巧),但你真的不想这样做;原因如下。

new 操作符创建一个新的 对象(不是函数),其 __proto__ 是操作数的 prototype。这意味着你不可能通过 new 操作符得到一个可调用的东西,除非你明确地从构造函数中返回其他东西。

但是如果你从构造函数中返回其他东西,那么 thing instanceof SomeThing 将会是 false,你也将无法从 thing 使用类的 prototype 方法。所以到那时,它实际上并不像一个 class,你最好直接使用一个工厂 函数,它可以随意做任何事情。