})
})
- test('generic type /w intersection', () => {
- expect(
- resolve(`
- type Wrapped<T> = T & symbol & number
- defineProps<{foo?: Wrapped<boolean>}>()
- `).props,
- ).toStrictEqual({
- foo: ['Boolean', 'Symbol', 'Number'],
- })
- })
-
test('generic from external-file', () => {
const files = {
'/foo.ts': 'export type P<T> = { foo: T }',
node: Node & MaybeWithScope,
scope: TypeScope = node._ownerScope || ctxToScope(ctx),
isKeyOf = false,
- typeParameters: Record<string, Node> | undefined = undefined,
+ typeParameters?: Record<string, Node>,
): string[] {
try {
switch (node.type) {
isKeyOf,
)
} else if (resolved.type === 'TSTypeAliasDeclaration') {
- const typeParams = Object.create(null)
+ const typeParams: Record<string, Node> = Object.create(null)
if (resolved.typeParameters) {
resolved.typeParameters.params.forEach((p, i) => {
typeParams![p.name] = node.typeParameters!.params[i]
case 'TSUnionType':
return flattenTypes(ctx, node.types, scope, isKeyOf, typeParameters)
case 'TSIntersectionType': {
- return flattenTypes(
- ctx,
- node.types,
- scope,
- isKeyOf,
- typeParameters,
- ).filter(t => t !== UNKNOWN_TYPE)
+ return flattenTypes(ctx, node.types, scope, isKeyOf).filter(
+ t => t !== UNKNOWN_TYPE,
+ )
}
case 'TSEnumDeclaration':