diff --git a/src/postprocess.js b/src/postprocess.js
index 77f63e9..e1a9d60 100644
--- a/src/postprocess.js
+++ b/src/postprocess.js
@@ -98,6 +98,7 @@ const is_valid_message = (block, message, translation) => {
case 'no-labels': return get_identifier(get_referenced_string(block, message)) !== '$';
case 'no-restricted-syntax': return message.nodeType !== 'LabeledStatement' || get_identifier(get_referenced_string(block, message)) !== '$';
case 'no-self-assign': return !state.var_names.has(get_identifier(get_referenced_string(block, message)));
+ case 'no-undef': return get_referenced_string(block, message) !== '$$Generic';
case 'no-unused-labels': return get_referenced_string(block, message) !== '$';
case '@typescript-eslint/quotes':
case 'quotes': return !translation.options.in_quoted_attribute;
diff --git a/test/samples/typescript-generics/.eslintrc.js b/test/samples/typescript-generics/.eslintrc.js
new file mode 100644
index 0000000..5cbce11
--- /dev/null
+++ b/test/samples/typescript-generics/.eslintrc.js
@@ -0,0 +1,11 @@
+module.exports = {
+ parser: '@typescript-eslint/parser',
+ extends: ['plugin:@typescript-eslint/recommended'],
+ plugins: ['@typescript-eslint'],
+ settings: {
+ 'svelte3/typescript': require('typescript'),
+ },
+ rules: {
+ 'no-undef': 'error',
+ },
+};
diff --git a/test/samples/typescript-generics/Input.svelte b/test/samples/typescript-generics/Input.svelte
new file mode 100644
index 0000000..e120bfb
--- /dev/null
+++ b/test/samples/typescript-generics/Input.svelte
@@ -0,0 +1,14 @@
+
+
+{#each items as item}
+
+{/each}
+
+{#if message}
+ {message}
+{/if}
diff --git a/test/samples/typescript-generics/expected.json b/test/samples/typescript-generics/expected.json
new file mode 100644
index 0000000..fe51488
--- /dev/null
+++ b/test/samples/typescript-generics/expected.json
@@ -0,0 +1 @@
+[]