我在使用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}}类型处理的回归吗?它之前是否已损坏,现在按设计工作?有一个简单的解决方法吗?这对我来说似乎是个错误。