打字稿:A <t extends =“”b <t =“”>&gt;上的错误

时间:2015-10-25 23:11:09

标签: generics typescript

如何在扩展泛型类A<T extend B<T>>时克服此错误?我们的想法是为B添加一些属性,同时保持它的通用性。

预期用途是这个的genric版本:

interface IEmployee extends ng.resource.IResource<IEmployee>
{
    id: number;
    firstName : string;
    lastName : string;
}
interface IEmployeeResource extends ng.resource.IResourceClass<IEmployee>
{
    update() : IEmployee;
}

这是 非通用 解决方案。我想制作一个通用解决方案,但是我得到错误类型参数的约束不能引用同一类型参数列表中的任何类型参数。

根据我的理解(来自c ++),我们应该能够做到这一点:

/// make all resource models have an id.
interface MyResourceModel<T> extends ng.resource.IResource<T> {
    id: number;
}

/// make all resources have an update action.
interface MyResourceClass<T extends MyResourceModel<T>> extends ng.resource.IResourceClass<T>
{
    update() : T;
}

TypeScript如何解决这个问题?这个限制是否有(不那么丑陋)的解决方法?

谢谢。

编辑:解决方案/解决方法(Working around loss of support for type constraint being self)已存在类似问题。将此解决方案应用于我的问题我会得到

interface MyResourceClass<T extends MyResourceModel<any>> extends ng.resource.IResourceClass<T> { 
                                                     ^--- note the 'any'
    update(): T;
}

这是当时的解决方案,但现在情况有所改变,TypeScript 1.7及更高版本应该(据称)支持此功能。我有triend版本1.7.x-dev和1.8.x-dev但是编译器仍然抱怨上面的错误。

如何使用最新版本的打字稿来完成?由于这是(据说)支持,我宁愿采取适当的解决方案。

谢谢。

0 个答案:

没有答案