TypeScript:构造签名和类型的交集类型不起作用,但调用签名和类型的交集类型起作用

TypeScript:构造签名和类型的交集类型不起作用,但调用签名和类型的交集类型起作用,typescript,typescript2.0,Typescript,Typescript2.0,我想创建一个交集类型,它由构造函数签名和其他类型组成 type CustomMixer<T1, T2> = (new (...args: any[]) => T1) & T2 无法将“new”与类型缺少调用或构造签名的表达式一起使用 但是,如果CustomMixer交集由调用签名和其他类型组成,那么一切都会按预期进行 type CustomMixer<T1, T2> = ((...args: any[]) => T1) & T2 const

我想创建一个交集类型,它由构造函数签名和其他类型组成

type CustomMixer<T1, T2> = (new (...args: any[]) => T1) & T2
无法将“new”与类型缺少调用或构造签名的表达式一起使用

但是,如果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
这里是链接到

第一个例子是否可行? 谢谢。

您可以这样做:

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

谢谢,有了这个解决方案,我更好地理解了TypeScript中的类型系统。
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