Handle type variables in isTypeDerivedFrom
This commit is contained in:
parent
6c4c10c7cf
commit
40579472a2
1 changed files with 2 additions and 0 deletions
|
@ -8868,6 +8868,7 @@ namespace ts {
|
||||||
// An object type S is considered to be derived from an object type T if
|
// An object type S is considered to be derived from an object type T if
|
||||||
// S is a union type and every constituent of S is derived from T,
|
// S is a union type and every constituent of S is derived from T,
|
||||||
// T is a union type and S is derived from at least one constituent of T, or
|
// T is a union type and S is derived from at least one constituent of T, or
|
||||||
|
// S is a type variable with a base constraint that is derived from T,
|
||||||
// T is one of the global types Object and Function and S is a subtype of T, or
|
// T is one of the global types Object and Function and S is a subtype of T, or
|
||||||
// T occurs directly or indirectly in an 'extends' clause of S.
|
// T occurs directly or indirectly in an 'extends' clause of S.
|
||||||
// Note that this check ignores type parameters and only considers the
|
// Note that this check ignores type parameters and only considers the
|
||||||
|
@ -8875,6 +8876,7 @@ namespace ts {
|
||||||
function isTypeDerivedFrom(source: Type, target: Type): boolean {
|
function isTypeDerivedFrom(source: Type, target: Type): boolean {
|
||||||
return source.flags & TypeFlags.Union ? every((<UnionType>source).types, t => isTypeDerivedFrom(t, target)) :
|
return source.flags & TypeFlags.Union ? every((<UnionType>source).types, t => isTypeDerivedFrom(t, target)) :
|
||||||
target.flags & TypeFlags.Union ? some((<UnionType>target).types, t => isTypeDerivedFrom(source, t)) :
|
target.flags & TypeFlags.Union ? some((<UnionType>target).types, t => isTypeDerivedFrom(source, t)) :
|
||||||
|
source.flags & TypeFlags.TypeVariable ? isTypeDerivedFrom(getBaseConstraintOfType(source) || emptyObjectType, target) :
|
||||||
target === globalObjectType || target === globalFunctionType ? isTypeSubtypeOf(source, target) :
|
target === globalObjectType || target === globalFunctionType ? isTypeSubtypeOf(source, target) :
|
||||||
hasBaseType(source, getTargetType(target));
|
hasBaseType(source, getTargetType(target));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue