我想创建一个交集类型,它由构造函数签名和其他类型组成。
type CustomMixer<T1, T2> = (new (...args: any[]) => T1) & T2
Generelly我需要这个来注释函数的返回类型,它将一些静态方法设置为一个类( Function ),如
Object.assign(MyCtorFn, staticMethods)
TypeScript允许创建此类型,并将其返回,但我无法使用new
关键字初始化该类型。
const MyType: CustomMixer<Foo, Bar> = someFactoryFunction()
const x = new MyType()
不能使用&#39; new&#39;使用表达式,其类型缺少调用或构造签名。
但是,如果CustomMixer
交集包含呼叫签名和其他类型,那么一切都按预期工作。
type CustomMixer<T1, T2> = ((...args: any[]) => T1) & T2
const MyType: CustomMixer<Foo, Bar> = someFactoryFunction()
MyType.| // Autocompletion for T2 works
const x = MyType()
x.|// Autocompletion for T1 works
的链接
是否可以让第一个例子有效? 谢谢。
答案 0 :(得分:1)
你可以这样做:
type CustomMixer<T1, T2> = T1 & T2;
function CustomMixerFactory<T1, T2>(): CustomMixer<T1, T2> {
// Mimic typed return
return null as CustomMixer<T1, T2>;
}
const MyType = CustomMixerFactory<typeof Foo, Baz>();
MyType.isBaz(); // fine
let myType = new MyType(); // fine
myType.isFoo(); // fine