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

Sign up
Appearance settings

Commit 26d9920

Browse files
Fix false negative with require-valid-default-prop (#1469)
1 parent 8bdb2a9 commit 26d9920

File tree

2 files changed

+93
-2
lines changed

2 files changed

+93
-2
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ function getPropertyNode(obj, name) {
4949
}
5050

5151
/**
52-
* @param {Expression} node
52+
* @param {Expression} targetNode
5353
* @returns {string[]}
5454
*/
55-
function getTypes(node) {
55+
function getTypes(targetNode) {
56+
const node = utils.skipTSAsExpression(targetNode)
5657
if (node.type === 'Identifier') {
5758
return [node.name]
5859
} else if (node.type === 'ArrayExpression') {

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

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,51 @@ ruleTester.run('require-valid-default-prop', rule, {
207207
}
208208
}`,
209209
parserOptions
210+
},
211+
{
212+
filename: 'test.vue',
213+
code: `export default Vue.extend({
214+
props: {
215+
foo: {
216+
type: Array as PropType<string[]>,
217+
default: () => []
218+
}
219+
}
220+
});
221+
`,
222+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
223+
parser: require.resolve('@typescript-eslint/parser'),
224+
errors: errorMessage('function')
225+
},
226+
{
227+
filename: 'test.vue',
228+
code: `export default Vue.extend({
229+
props: {
230+
foo: {
231+
type: Object as PropType<{ [key: number]: number }>,
232+
default: () => {}
233+
}
234+
}
235+
});
236+
`,
237+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
238+
parser: require.resolve('@typescript-eslint/parser'),
239+
errors: errorMessage('function')
240+
},
241+
{
242+
filename: 'test.vue',
243+
code: `export default Vue.extend({
244+
props: {
245+
foo: {
246+
type: Function as PropType<() => number>,
247+
default: () => 10
248+
}
249+
}
250+
});
251+
`,
252+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
253+
parser: require.resolve('@typescript-eslint/parser'),
254+
errors: errorMessage('function')
210255
}
211256
],
212257

@@ -781,6 +826,51 @@ ruleTester.run('require-valid-default-prop', rule, {
781826
}`,
782827
parserOptions,
783828
errors: errorMessage('string')
829+
},
830+
{
831+
filename: 'test.vue',
832+
code: `export default Vue.extend({
833+
props: {
834+
foo: {
835+
type: Array as PropType<string[]>,
836+
default: []
837+
}
838+
}
839+
});
840+
`,
841+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
842+
parser: require.resolve('@typescript-eslint/parser'),
843+
errors: errorMessage('function')
844+
},
845+
{
846+
filename: 'test.vue',
847+
code: `export default Vue.extend({
848+
props: {
849+
foo: {
850+
type: Object as PropType<{ [key: number]: number }>,
851+
default: {}
852+
}
853+
}
854+
});
855+
`,
856+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
857+
parser: require.resolve('@typescript-eslint/parser'),
858+
errors: errorMessage('function')
859+
},
860+
{
861+
filename: 'test.vue',
862+
code: `export default Vue.extend({
863+
props: {
864+
foo: {
865+
type: Function as PropType<() => number>,
866+
default: 10
867+
}
868+
}
869+
});
870+
`,
871+
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
872+
parser: require.resolve('@typescript-eslint/parser'),
873+
errors: errorMessage('function')
784874
}
785875
]
786876
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /