TypeScript 2.6错误地扩展此类型用作通用参数

时间:2018-01-05 23:09:07

标签: typescript generics this

我在使用TypeScript 2.6中的通用接口this类型时遇到了一个稍微复杂的问题。它似乎在2.5中工作正常。请考虑以下事项:

interface EntitySet<T> {
    promise: Promise<this>;
}

class SetInfo<TEntity, SetType extends EntitySet<TEntity>> { }

export class AnEntitySet<TEntity> implements EntitySet<TEntity> {
    promise = new Promise<this>(r => { });
    fails = new SetInfo<TEntity, this>();
    //                           ^--- Error here
    works: EntitySet<TEntity> = this
}

无法使用以下错误进行编译:

Type 'this' does not satisfy the constraint 'EntitySet<TEntity>'.
  Type 'AnEntitySet<TEntity>' is not assignable to type 'EntitySet<TEntity>'.
    Types of property 'promise' are incompatible.
      Type 'Promise<AnEntitySet<TEntity>>' is not assignable to type 'Promise<this>'.
        Type 'AnEntitySet<TEntity>' is not assignable to type 'this'.

从表面上看,消息Type 'AnEntitySet<TEntity>' is not assignable to type 'EntitySet<TEntity>'似乎显然是错误的。当然AnEntitySet<TEntity>可分配给EntitySet<TEntity>,它直接实现它!当然,我可以将this分配给EntitySet<TEntity>类型的字段就好了(请参阅works字段)。

似乎某种方式this类型正在某处扩展到AnEntitySet<TEntity>,因为this可能是某些子类,所以this确实无法将其分配给this。但在这种情况下,所有类型说明符都引用this,因此看起来无效。

这是TypeScript对{{1}}类型处理的回归吗?它之前是否已损坏,现在按设计工作?有一个简单的解决方法吗?这对我来说似乎是个错误。

0 个答案:

没有答案