Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2d6e118

Browse filesBrowse files
authored
feat: handle generic parameter types (#2693)
1 parent 9c45d55 commit 2d6e118
Copy full SHA for 2d6e118

File tree

Expand file treeCollapse file tree

2 files changed

+40
-2
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+40
-2
lines changed

‎lib/utils/ts-utils/ts-types.js

Copy file name to clipboardExpand all lines: lib/utils/ts-utils/ts-types.js
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,18 @@ function inferRuntimeTypeInternal(type, services) {
202202
const { checker } = services
203203
/** @type {Set<string>} */
204204
const types = new Set()
205+
206+
// handle generic parameter types
207+
if (type.isTypeParameter()) {
208+
const constraint = type.getConstraint()
209+
if (constraint) {
210+
for (const t of inferRuntimeTypeInternal(constraint, services)) {
211+
types.add(t)
212+
}
213+
}
214+
return [...types]
215+
}
216+
205217
for (const targetType of iterateTypes(checker.getNonNullableType(type))) {
206218
if (
207219
isAny(targetType) ||

‎tests/lib/rules/require-valid-default-prop.js

Copy file name to clipboardExpand all lines: tests/lib/rules/require-valid-default-prop.js
+28-2Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,7 @@ ruleTester.run('require-valid-default-prop', rule, {
222222
`,
223223
languageOptions: {
224224
parser: require('@typescript-eslint/parser'),
225-
ecmaVersion: 6,
226-
sourceType: 'module'
225+
...languageOptions
227226
}
228227
},
229228
{
@@ -332,6 +331,17 @@ ruleTester.run('require-valid-default-prop', rule, {
332331
languageOptions: {
333332
parser: require('vue-eslint-parser')
334333
}
334+
},
335+
{
336+
// https://github.com/vuejs/eslint-plugin-vue/issues/2692
337+
filename: 'test.vue',
338+
code: `
339+
<script setup lang="ts">
340+
type MaybeString<T extends number> = T | \`\${T}\`
341+
const { foo = 1 } = defineProps<{ foo: MaybeString<1, 2>}>()
342+
</script>
343+
`,
344+
...getTypeScriptFixtureTestOptions()
335345
}
336346
],
337347

@@ -1201,6 +1211,22 @@ ruleTester.run('require-valid-default-prop', rule, {
12011211
line: 3
12021212
}
12031213
]
1214+
},
1215+
{
1216+
filename: 'test.vue',
1217+
code: `
1218+
<script setup lang="ts">
1219+
type MaybeString<T extends string | number> = \`\${T}\`
1220+
const { foo = 1 } = defineProps<{ foo: MaybeString<1, 2>}>()
1221+
</script>
1222+
`,
1223+
errors: [
1224+
{
1225+
message: "Type of the default value for 'foo' prop must be a string.",
1226+
line: 4
1227+
}
1228+
],
1229+
...getTypeScriptFixtureTestOptions()
12041230
}
12051231
]
12061232
})

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.