@@ -1280,7 +1280,7 @@ namespace ts {
12801280 function bindInitializedVariableFlow ( node : VariableDeclaration | ArrayBindingElement ) {
12811281 const name = ! isOmittedExpression ( node ) ? node . name : undefined ;
12821282 if ( isBindingPattern ( name ) ) {
1283- for ( const child of name . elements ) {
1283+ for ( const child of < ArrayBindingElement [ ] > name . elements ) {
12841284 bindInitializedVariableFlow ( child ) ;
12851285 }
12861286 }
@@ -2629,7 +2629,7 @@ namespace ts {
26292629 }
26302630
26312631 // parameters with object rest destructuring are ES Next syntax
2632- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2632+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
26332633 transformFlags |= TransformFlags . AssertESNext ;
26342634 }
26352635
@@ -2867,7 +2867,7 @@ namespace ts {
28672867 }
28682868
28692869 // function declarations with object rest destructuring are ES Next syntax
2870- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2870+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
28712871 transformFlags |= TransformFlags . AssertESNext ;
28722872 }
28732873
@@ -2909,7 +2909,7 @@ namespace ts {
29092909 }
29102910
29112911 // function expressions with object rest destructuring are ES Next syntax
2912- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2912+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
29132913 transformFlags |= TransformFlags . AssertESNext ;
29142914 }
29152915
@@ -2952,7 +2952,7 @@ namespace ts {
29522952 }
29532953
29542954 // arrow functions with object rest destructuring are ES Next syntax
2955- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2955+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
29562956 transformFlags |= TransformFlags . AssertESNext ;
29572957 }
29582958
@@ -2982,16 +2982,11 @@ namespace ts {
29822982
29832983 function computeVariableDeclaration ( node : VariableDeclaration , subtreeFlags : TransformFlags ) {
29842984 let transformFlags = subtreeFlags ;
2985- const nameKind = node . name . kind ;
2985+ transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
29862986
2987- // A VariableDeclaration with an object binding pattern is ES2015 syntax
2988- // and possibly ESNext syntax if it contains an object binding pattern
2989- if ( nameKind === SyntaxKind . ObjectBindingPattern ) {
2990- transformFlags |= TransformFlags . AssertESNext | TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
2991- }
2992- // A VariableDeclaration with an object binding pattern is ES2015 syntax.
2993- else if ( nameKind === SyntaxKind . ArrayBindingPattern ) {
2994- transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
2987+ // A VariableDeclaration containing ObjectRest is ESNext syntax
2988+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
2989+ transformFlags |= TransformFlags . AssertESNext ;
29952990 }
29962991
29972992 // Type annotations are TypeScript syntax.
@@ -3213,13 +3208,6 @@ namespace ts {
32133208 transformFlags |= TransformFlags . AssertESNext | TransformFlags . ContainsSpread | TransformFlags . ContainsObjectSpread ;
32143209 break ;
32153210
3216- case SyntaxKind . BindingElement :
3217- transformFlags |= TransformFlags . AssertES2015 ;
3218- if ( ( < BindingElement > node ) . dotDotDotToken ) {
3219- transformFlags |= TransformFlags . ContainsRest ;
3220- }
3221- break ;
3222-
32233211 case SyntaxKind . SuperKeyword :
32243212 // This node is ES6 syntax.
32253213 transformFlags |= TransformFlags . AssertES2015 ;
@@ -3232,7 +3220,7 @@ namespace ts {
32323220
32333221 case SyntaxKind . ObjectBindingPattern :
32343222 transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
3235- if ( subtreeFlags & TransformFlags . ContainsSpread ) {
3223+ if ( subtreeFlags & TransformFlags . ContainsRest ) {
32363224 transformFlags |= TransformFlags . AssertESNext | TransformFlags . ContainsObjectRest ;
32373225 }
32383226 excludeFlags = TransformFlags . BindingPatternExcludes ;
@@ -3243,6 +3231,13 @@ namespace ts {
32433231 excludeFlags = TransformFlags . BindingPatternExcludes ;
32443232 break ;
32453233
3234+ case SyntaxKind . BindingElement :
3235+ transformFlags |= TransformFlags . AssertES2015 ;
3236+ if ( ( < BindingElement > node ) . dotDotDotToken ) {
3237+ transformFlags |= TransformFlags . ContainsRest ;
3238+ }
3239+ break ;
3240+
32463241 case SyntaxKind . Decorator :
32473242 // This node is TypeScript syntax, and marks its container as also being TypeScript syntax.
32483243 transformFlags |= TransformFlags . AssertTypeScript | TransformFlags . ContainsDecorators ;
0 commit comments