如何自动将参数应用于类构造函数?

Gog*_*eli 11 javascript typescript ecmascript-6

我有一个es6类User和一个全局函数map(),如下所示:

class  User {
  constructor(public name: string) {}
}

const map = <T, R>(project: (value: T) => R) => {}
Run Code Online (Sandbox Code Playgroud)

而不是写下面的内容:

map((value) => new User(value))
Run Code Online (Sandbox Code Playgroud)

我想(不知何故)写下这样的东西:

map(new User)
Run Code Online (Sandbox Code Playgroud)

我不确定这是否可行.

Bab*_*boo 6

您可以在类中创建一个静态函数,它接受值param并返回一个新用户:

class User {
  static createUser(value) {
    return new User(value)
  }
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

map(User.createUser)
Run Code Online (Sandbox Code Playgroud)


Tit*_*mir 5

你不能直接这样做.如果您控制目标函数(即它不是stock map函数),您可以使用构造函数而不是函数:

class User { constructor(private id: number) { }}
function map<TIn, T>(value: TIn, ctor: new (a: TIn) => T): T{
    return new ctor(value)
}
map(10, User)
Run Code Online (Sandbox Code Playgroud)

另一个更灵活的解决方案是使用辅助函数将构造函数转换为所需的函数,尽管它不比原始版本短得多:

class User { constructor(private id: number) { }}
function ctor<TIn, T>(ctor: new (a: TIn) => T): (value: TIn) => T{
    return value => new ctor(value)
}
[10, 11].map(ctor(User));
Run Code Online (Sandbox Code Playgroud)