Spread any types to any

This commit is contained in:
Nathan Shively-Sanders
2016-11-04 16:06:33 -07:00
parent 7a2c7ad374
commit a55ed26d2b
6 changed files with 101 additions and 80 deletions

View File

@@ -5884,8 +5884,11 @@ namespace ts {
* this function should be called in a left folding style, with left = previous result of getSpreadType
* and right = the new element to be spread.
*/
function getSpreadType(left: Type, right: Type, symbol: Symbol): ResolvedType {
Debug.assert(!!(left.flags & TypeFlags.Object) && !!(right.flags & TypeFlags.Object), "Only object types may be spread.");
function getSpreadType(left: Type, right: Type, symbol: Symbol): ResolvedType | IntrinsicType {
Debug.assert(!!(left.flags & (TypeFlags.Object | TypeFlags.Any)) && !!(right.flags & (TypeFlags.Object | TypeFlags.Any)), "Only object types may be spread.");
if (left.flags & TypeFlags.Any || right.flags & TypeFlags.Any) {
return anyType;
}
const members = createMap<Symbol>();
const skippedPrivateMembers = createMap<boolean>();
let stringIndexInfo: IndexInfo;
@@ -10934,7 +10937,7 @@ namespace ts {
typeFlags = 0;
}
const type = checkExpression((memberDecl as SpreadElementExpression).expression);
if (!(type.flags & TypeFlags.Object)) {
if (!(type.flags & (TypeFlags.Object | TypeFlags.Any))) {
error(memberDecl, Diagnostics.Spread_types_may_only_be_created_from_object_types);
return unknownType;
}