【发布时间】:2017-10-21 07:05:53
【问题描述】:
在 ES6 类中,我发现自己创建静态 create 方法,更喜欢使用 ClassName.create() 而不是 new ClassName() 或 new ClassName,因为我遇到了一些与访问新的属性有关的愚蠢错误创建的对象;滑倒并做new ClassName.methodCall()而不是(new ClassName).methodCall()。 IMO 更干净,ClassName.create().methodCall() 更不容易出现愚蠢和难以捕捉的错误。
但是,在每个类上都这样做会变得乏味和冗长,所以我想知道是否有一种方法可以使用 TS/ES6 装饰器以便我可以这样做
@Creatable // or @Creatable()
class ClassName {
constructor(arguments: IArguments) {}
}
这将在类上创建一个static create(arguments: IArguments) { return new this(arguments); } 方法,具有相同的参数,包括类型。
这可能吗?如果可以,怎么做?
【问题讨论】:
-
扩展可创建;类可创建 { create(args...){ var obj=Object.create(this); this.constructor.call(this,...args);return obj;}}
-
忘了说我想让它输入安全,将编辑问题
-
其实
new ClassName(…).methodCall()工作得很好。只有当您省略构造函数参数列表 (new ClassName.methodCall()) 时,您才需要将其分组到(new ClassName).methodCall()。 -
@Jonasw 不要为此使用继承(你的方法也不能满足 OP 的要求)
-
看来你是对的,我有问题没有争论。我会更新问题,因为无论如何我都想使用
.create()模式
标签: javascript typescript ecmascript-6 decorator