Skip to content

Commit 1c48d7c

Browse files
Typescript each indexed (#9567)
* failing test * fix undefined index bug * Update packages/svelte/src/compiler/phases/1-parse/read/context.js Co-authored-by: Simon H <[email protected]> --------- Co-authored-by: Rich Harris <[email protected]> Co-authored-by: Simon H <[email protected]>
1 parent 95c6b65 commit 1c48d7c

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

packages/svelte/src/compiler/phases/1-parse/read/context.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ function read_type_annotation(parser) {
106106
const insert = '_ as ';
107107
let a = parser.index - insert.length;
108108
const template = ' '.repeat(a) + insert + parser.template.slice(parser.index);
109-
const expression = parse_expression_at(template, parser.ts, a);
109+
let expression = parse_expression_at(template, parser.ts, a);
110+
111+
// `array as item: string, index` becomes `string, index`, which is mistaken as a sequence expression - fix that
112+
if (expression.type === 'SequenceExpression') {
113+
expression = expression.expressions[0];
114+
}
110115

111116
parser.index = /** @type {number} */ (expression.end);
112117
return /** @type {any} */ (expression).typeAnnotation;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
html: `
5+
<span>0: a</span>
6+
<span>1: b</span>
7+
<span>2: c</span>
8+
`
9+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script lang="ts">
2+
let letters = ['a', 'b', 'c'];
3+
</script>
4+
5+
{#each letters as letter: string, i}
6+
<span>{i}: {letter}</span>
7+
{/each}

0 commit comments

Comments
 (0)