diff --git a/src/lexers/jsx-lexer.js b/src/lexers/jsx-lexer.js index 37c9dd86..eba68964 100644 --- a/src/lexers/jsx-lexer.js +++ b/src/lexers/jsx-lexer.js @@ -211,7 +211,14 @@ export default class JsxLexer extends JavascriptLexer { type: 'text', content: '', } - } else if (child.expression.kind === ts.SyntaxKind.StringLiteral) { + } + + // simplify trivial expressions, like TypeScript typecasts + if (child.expression.kind === ts.SyntaxKind.AsExpression) { + child = child.expression + } + + if (child.expression.kind === ts.SyntaxKind.StringLiteral) { return { type: 'text', content: child.expression.text, diff --git a/test/lexers/jsx-lexer.test.js b/test/lexers/jsx-lexer.test.js index 74c86aaa..41cf7744 100644 --- a/test/lexers/jsx-lexer.test.js +++ b/test/lexers/jsx-lexer.test.js @@ -354,6 +354,15 @@ describe('JsxLexer', () => { done() }) + it('erases typecasts', (done) => { + const Lexer = new JsxLexer() + const content = '{{ key: property } as any}' + assert.deepEqual(Lexer.extract(content), [ + { key: '{{key}}', defaultValue: '{{key}}' }, + ]) + done() + }) + it('keeps self-closing tags untouched when transSupportBasicHtmlNodes is true', (done) => { const Lexer = new JsxLexer({ transSupportBasicHtmlNodes: true }) const content = 'a
b
'