[Release 2.0] fix10076 : Destructing with "this" (#10209)

* Call checkExpression eventhough there is no appropriate type from destructuring of array

* Add tests and baselines
This commit is contained in:
Yui
2016-08-09 16:05:17 -07:00
committed by GitHub
parent 0cfeaaffb5
commit 5d0e1994f4
7 changed files with 88 additions and 3 deletions

View File

@@ -4308,9 +4308,14 @@ namespace ts {
return property;
}
// Return the symbol for the property with the given name in the given type. Creates synthetic union properties when
// necessary, maps primitive types and type parameters are to their apparent types, and augments with properties from
// Object and Function as appropriate.
/**
* Return the symbol for the property with the given name in the given type. Creates synthetic union properties when
* necessary, maps primitive types and type parameters are to their apparent types, and augments with properties from
* Object and Function as appropriate.
*
* @param type a type to look up property from
* @param name a name of property to look up in a given type
*/
function getPropertyOfType(type: Type, name: string): Symbol {
type = getApparentType(type);
if (type.flags & TypeFlags.ObjectType) {
@@ -12516,6 +12521,9 @@ namespace ts {
return checkDestructuringAssignment(element, type, contextualMapper);
}
else {
// We still need to check element expression here because we may need to set appropriate flag on the expression
// such as NodeCheckFlags.LexicalThis on "this"expression.
checkExpression(element);
if (isTupleType(sourceType)) {
error(element, Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), (<TupleType>sourceType).elementTypes.length, elements.length);
}