@@ -2938,8 +2938,8 @@ namespace ts {
2938
2938
return type.resolvedBaseConstructorType;
2939
2939
}
2940
2940
2941
- function hasClassBaseType (type: InterfaceType): boolean {
2942
- return !!forEach(getBaseTypes(type), t => !!(t.symbol.flags & SymbolFlags.Class));
2941
+ function hasClassOrInterfaceBaseType (type: InterfaceType): boolean {
2942
+ return !!forEach(getBaseTypes(type), t => !!(t.symbol.flags & ( SymbolFlags.Class | SymbolFlags.Interface) ));
2943
2943
}
2944
2944
2945
2945
function getBaseTypes(type: InterfaceType): ObjectType[] {
@@ -3375,11 +3375,14 @@ namespace ts {
3375
3375
}
3376
3376
3377
3377
function getDefaultConstructSignatures(classType: InterfaceType): Signature[] {
3378
- if (!hasClassBaseType (classType)) {
3378
+ if (!hasClassOrInterfaceBaseType (classType)) {
3379
3379
return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, undefined, 0, /*hasRestParameter*/ false, /*hasStringLiterals*/ false)];
3380
3380
}
3381
3381
const baseConstructorType = getBaseConstructorTypeOfClass(classType);
3382
3382
const baseSignatures = getSignaturesOfType(baseConstructorType, SignatureKind.Construct);
3383
+ if(baseSignatures.length === 0) {
3384
+ return [createSignature(undefined, classType.localTypeParameters, emptyArray, classType, undefined, 0, /*hasRestParameter*/ false, /*hasStringLiterals*/ false)];
3385
+ }
3383
3386
const baseTypeNode = getBaseTypeNodeOfClass(classType);
3384
3387
const typeArguments = map(baseTypeNode.typeArguments, getTypeFromTypeNode);
3385
3388
const typeArgCount = typeArguments ? typeArguments.length : 0;
@@ -3597,16 +3600,17 @@ namespace ts {
3597
3600
return <ResolvedType>type;
3598
3601
}
3599
3602
3600
- // Return properties of an object type or an empty array for other types
3603
+
3604
+ /** Return properties of an object type or an empty array for other types */
3601
3605
function getPropertiesOfObjectType(type: Type): Symbol[] {
3602
3606
if (type.flags & TypeFlags.ObjectType) {
3603
3607
return resolveStructuredTypeMembers(<ObjectType>type).properties;
3604
3608
}
3605
3609
return emptyArray;
3606
3610
}
3607
3611
3608
- // If the given type is an object type and that type has a property by the given name,
3609
- // return the symbol for that property.Otherwise return undefined.
3612
+ /** If the given type is an object type and that type has a property by the given name,
3613
+ * return the symbol for that property. Otherwise return undefined. */
3610
3614
function getPropertyOfObjectType(type: Type, name: string): Symbol {
3611
3615
if (type.flags & TypeFlags.ObjectType) {
3612
3616
const resolved = resolveStructuredTypeMembers(<ObjectType>type);
0 commit comments