benjamn / ast-types

Esprima-compatible implementation of the Mozilla JS Parser API
MIT License
1.13k stars 195 forks source link

Wrong structure of TSFunctionType node #940

Open shogunsea opened 1 year ago

shogunsea commented 1 year ago

Given the following code:

export const FooFoo = buildFoo('Foo') as unknown as (foo: any) => Foo | FooLegacy;

What ast-explorer shows is that the TSUnionType node is on the returnType attribute of the TSFunctionType node: image

However when using jscodeshift with recast/ast-types it's being parsed as the following:

jscodeshiftCodemod ts — pineapple 2023-07-06 15-43-42

instead of being on the tsFunctionTypeNode.returnType.typeAnnotation attribute, it's actually structured as tsFunctionTypeNode.typeAnnotation.typeAnnotation

shogunsea commented 1 year ago

additionally, it seems TSFunctionTypeBuilder only takes single parameters argument, so it seems it's impossible to annotate the return type?
https://github.com/benjamn/ast-types/blob/6e4d91213c27b6ba76a747c45200aa0e8498b176/src/gen/builders.ts#L3248