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