fix(compiler-sfc): infer TS Extract&Exclude runtime type (#7339)

closes #7337
closes #6252
This commit is contained in:
三咲智子 Kevin Deng 2023-03-28 15:19:14 +08:00 committed by GitHub
parent 3a7572cdb2
commit 6391daf658
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 2 deletions

View File

@ -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 },

View File

@ -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,

View File

@ -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`]