Generics 如何用泛型实现类型声明?

Generics 如何用泛型实现类型声明?,generics,typescript,Generics,Typescript,如何定义包含泛型的类型声明的实现函数 我的意思是: abstract class Base {} class Sub extends Base {} declare type BaseFactory = <T extends Base>() => T; let subFactory: BaseFactory = <Sub>():Sub => new Sub(); console.debug(subFactory()); // expect instance

如何定义包含泛型的类型声明的实现函数

我的意思是:

abstract class Base {}
class Sub extends Base {}

declare type BaseFactory = <T extends Base>() => T;
let subFactory: BaseFactory = <Sub>():Sub => new Sub();

console.debug(subFactory()); // expect instance of Sub
抽象类基类{}
类Sub扩展基{}
声明类型BaseFactory=()=>T;
let subFactory:BaseFactory=():Sub=>new Sub();
console.debug(subFactory());//期望Sub实例
不幸的是,这会产生以下错误:

Sub不可分配给Base类型的参数

这能做到吗

/编辑不必管它。我猜这是一个编译器版本问题

这是有效的:

declare type BaseFactory = <T extends Base>() => T;
let subFactory: BaseFactory = (): Sub => new Sub();

let a = subFactory<Sub>(); // type of a is Sub
声明类型BaseFactory=()=>T;
let subFactory:BaseFactory=():Sub=>new Sub();
设a=subFactory();//a的类型是Sub
()

但我会这样做:

declare type BaseFactory<T extends Base> = () => T;
let subFactory: BaseFactory<Sub> = (): Sub => new Sub();

let a = subFactory(); // type of a is Sub
声明类型BaseFactory=()=>T;
let subFactory:BaseFactory=():Sub=>new Sub();
设a=subFactory();//a的类型是Sub
()


编辑 如果您使用的是typescript>=2.3,则可以使用默认泛型:

declare type BaseFactory<T extends Base = Base> = () => T;
声明类型BaseFactory=()=>T;

第二个版本的问题是,现在必须声明t everywhere BaseFactory用作属性或参数,其中与第一个版本一样,t仅在实际调用函数时才需要。请检查我修改的答案