我倾向于使用静态构造器Foo.of(
/Foo. from(<>/code>)方法,而不是必须用
new
的典型类别构造。 我认为,这三者更容易阅读,同样,可以免费使用。 然而,我最后写了很多象这样的碎块:
class Foo<T> {
constructor(private value: T) {}
static of<T>(value: T) {
return new Foo(value);
}
}
class Bar<T, U> {
constructor(private value1: T, private value2: U) {}
static of<T, U>(value1: T, value2: U) {
return new Bar(value1, value2);
}
}
是否有任何办法,例如使用一台装饰器(+一个接口,可能),以避免不得不宣布。 每次都采用这种方法,但可以采取类似做法:
type Constructor = new (...args: any) => any;
interface Constructable<T extends Constructor> {
static of(...args: Parameters<T>): T;
}
function constructable<T>(constructor: Constructor) { ... }
// ....
@constructable
class Foo<T> {
constructor(private value: T) {}
}
interface Foo<T> extends Constructable<Foo<T>> {}
@constructable
class Bar<T, U> {
constructor(private value1: T, value2: U) {}
}
interface Bar<T, U> extends Constructable<Bar<T, U>> {}
const foo = Foo.of(10)
const bar = Bar.of(10, 20)