Open Pzixel opened 2 years ago
Ping? I can try adding this myself if you're agreed that it's useful to reexport generated types
Hey @Pzixel!
Yes, this looks definitely like an important feature but I am not sure what exactly causes the problem. Structs should be exported in a code that TypeChain generates. You might just need a different import path to get them. Have you tried that?
Hi!
Sorry, I'm not following which path you mean. I don't see any typechain
artifacts in my eth-sdk
-enabled project.
Hi. Ping? I think this is quite crucial. I think I just might fix this, but I'm confused by you saying it already should work.
Could you please take a look on example I provide? Where can we find these types? If we look at eth-sdk-client
we'll see
import { providers, Signer } from 'ethers';
import * as types from './types';
export declare function getContract(address: string, abi: object, defaultSignerOrProvider: Signer | providers.Provider): any;
export declare type MainnetSdk = ReturnType<typeof getMainnetSdk>;
So we dive into types
that gives
import type * as mainnet from "./mainnet";
export type { mainnet };
export * as factories from "./factories";
export type { UniswapV3 } from "./mainnet/UniswapV3";
export { UniswapV3__factory } from "./factories/mainnet/UniswapV3__factory";
And this is it. As you can see only UniswapV3
type gets exported, inner structs remain private since they aren't reexported.
I've just took a look and it looks like typechain isn't giving any names to such types. So I might start from there and then return here. You see even if typechain was properly generating intermediate structs they wouldn't be accessible since they aren't reexported
Consider following config:
Now If we call it it all compiles:
However, if we try to specify struct name it won't work:
The problem is type is not reexported so it cannot be accessed outside. It may be useful in cases when I want to write a function like
P.S. for some reason generation doesn't work for all types. For example following config:
Leads to
Note that it didn't generate proper named struct for ABI.