})
})
+ test('utility type: Partial', () => {
+ expect(
+ resolve(`
+ type T = { foo: number, bar: string }
+ defineProps<Partial<T>>()
+ `).raw.props
+ ).toMatchObject({
+ foo: {
+ optional: true
+ },
+ bar: {
+ optional: true
+ }
+ })
+ })
+
+ test('utility type: Required', () => {
+ expect(
+ resolve(`
+ type T = { foo?: number, bar?: string }
+ defineProps<Required<T>>()
+ `).raw.props
+ ).toMatchObject({
+ foo: {
+ optional: false
+ },
+ bar: {
+ optional: false
+ }
+ })
+ })
+
test('utility type: Pick', () => {
expect(
resolve(`
): ResolvedElements {
const t = resolveTypeElements(ctx, node.typeParameters!.params[0])
switch (name) {
- case 'Partial':
- case 'Required':
+ case 'Partial': {
+ const res: ResolvedElements = { props: {}, calls: t.calls }
+ Object.keys(t.props).forEach(key => {
+ res.props[key] = { ...t.props[key], optional: true }
+ })
+ return res
+ }
+ case 'Required': {
+ const res: ResolvedElements = { props: {}, calls: t.calls }
+ Object.keys(t.props).forEach(key => {
+ res.props[key] = { ...t.props[key], optional: false }
+ })
+ return res
+ }
case 'Readonly':
return t
case 'Pick': {