mirror of https://github.com/vuejs/core.git
fix(compiler-sfc): infer TS Extract&Exclude runtime type (#7339)
closes #7337 closes #6252
This commit is contained in:
parent
3a7572cdb2
commit
6391daf658
|
@ -1619,6 +1619,8 @@ export default /*#__PURE__*/_defineComponent({
|
||||||
alias: { type: Array, required: true },
|
alias: { type: Array, required: true },
|
||||||
method: { type: Function, required: true },
|
method: { type: Function, required: true },
|
||||||
symbol: { type: Symbol, required: true },
|
symbol: { type: Symbol, required: true },
|
||||||
|
extract: { type: Number, required: true },
|
||||||
|
exclude: { type: [Number, Boolean], required: true },
|
||||||
objectOrFn: { type: [Function, Object], required: true },
|
objectOrFn: { type: [Function, Object], required: true },
|
||||||
union: { type: [String, Number], required: true },
|
union: { type: [String, Number], required: true },
|
||||||
literalUnion: { type: String, required: true },
|
literalUnion: { type: String, required: true },
|
||||||
|
|
|
@ -960,6 +960,8 @@ const emit = defineEmits(['a', 'b'])
|
||||||
alias: Alias
|
alias: Alias
|
||||||
method(): void
|
method(): void
|
||||||
symbol: symbol
|
symbol: symbol
|
||||||
|
extract: Extract<1 | 2 | boolean, 2>
|
||||||
|
exclude: Exclude<1 | 2 | boolean, 2>
|
||||||
objectOrFn: {
|
objectOrFn: {
|
||||||
(): void
|
(): void
|
||||||
foo: string
|
foo: string
|
||||||
|
@ -997,6 +999,10 @@ const emit = defineEmits(['a', 'b'])
|
||||||
expect(content).toMatch(
|
expect(content).toMatch(
|
||||||
`objectOrFn: { type: [Function, Object], required: true },`
|
`objectOrFn: { type: [Function, Object], required: true },`
|
||||||
)
|
)
|
||||||
|
expect(content).toMatch(`extract: { type: Number, required: true }`)
|
||||||
|
expect(content).toMatch(
|
||||||
|
`exclude: { type: [Number, Boolean], required: true }`
|
||||||
|
)
|
||||||
expect(content).toMatch(
|
expect(content).toMatch(
|
||||||
`union: { type: [String, Number], required: true }`
|
`union: { type: [String, Number], required: true }`
|
||||||
)
|
)
|
||||||
|
@ -1031,6 +1037,8 @@ const emit = defineEmits(['a', 'b'])
|
||||||
method: BindingTypes.PROPS,
|
method: BindingTypes.PROPS,
|
||||||
symbol: BindingTypes.PROPS,
|
symbol: BindingTypes.PROPS,
|
||||||
objectOrFn: BindingTypes.PROPS,
|
objectOrFn: BindingTypes.PROPS,
|
||||||
|
extract: BindingTypes.PROPS,
|
||||||
|
exclude: BindingTypes.PROPS,
|
||||||
union: BindingTypes.PROPS,
|
union: BindingTypes.PROPS,
|
||||||
literalUnion: BindingTypes.PROPS,
|
literalUnion: BindingTypes.PROPS,
|
||||||
literalUnionNumber: BindingTypes.PROPS,
|
literalUnionNumber: BindingTypes.PROPS,
|
||||||
|
|
|
@ -2057,11 +2057,26 @@ function inferRuntimeType(
|
||||||
case 'Readonly':
|
case 'Readonly':
|
||||||
case 'Pick':
|
case 'Pick':
|
||||||
case 'Omit':
|
case 'Omit':
|
||||||
case 'Exclude':
|
|
||||||
case 'Extract':
|
|
||||||
case 'Required':
|
case 'Required':
|
||||||
case 'InstanceType':
|
case 'InstanceType':
|
||||||
return ['Object']
|
return ['Object']
|
||||||
|
|
||||||
|
case 'Extract':
|
||||||
|
if (node.typeParameters && node.typeParameters.params[1]) {
|
||||||
|
return inferRuntimeType(
|
||||||
|
node.typeParameters.params[1],
|
||||||
|
declaredTypes
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return ['null']
|
||||||
|
case 'Exclude':
|
||||||
|
if (node.typeParameters && node.typeParameters.params[0]) {
|
||||||
|
return inferRuntimeType(
|
||||||
|
node.typeParameters.params[0],
|
||||||
|
declaredTypes
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return ['null']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [`null`]
|
return [`null`]
|
||||||
|
|
Loading…
Reference in New Issue