metaplex-foundation/kinobi

[experimental renderer] `Address` type incompatible with instruction creator

Closed this issue · 1 comments

Problem

This code works

return getAdvanceNonceAccountInstructionRaw({
  nonceAccount: address('123'),
  nonceAuthority: address('456'),
});

But this code generates a type error.

function go<
  TNonceAccountAddress extends string,
  TNonceAuthorityAddress extends string
>(
  nonceAccount: Address<TNonceAccountAddress>,
  nonceAuthority: Address<TNonceAuthorityAddress>
) {
  return getAdvanceNonceAccountInstructionRaw({
    nonceAccount,
    nonceAuthority,
  });
}
index.ts:12:5 - error TS2322: Type 'Address<TNonceAccountAddress>' is not assignable to type 'TNonceAccountAddress extends string ? Address<TNonceAccountAddress> : TNonceAccountAddress'.

12     nonceAccount,
       ~~~~~~~~~~~~

  node_modules/.pnpm/@solana-program+system@0.1.0_patch_hash=go463mkopznrn5ptsqp4qlrd74_fastestsmallesttextencoderdecoder@1.0.22/node_modules/@solana-program/system/dist/types/src/generated/instructions/advanceNonceAccount.d.ts:44:5
    44     nonceAccount: TAccountNonceAccount extends string ? Address<TAccountNonceAccount> : TAccountNonceAccount;
           ~~~~~~~~~~~~
    The expected type comes from property 'nonceAccount' which is declared here on type '{ nonceAccount: TNonceAccountAddress extends string ? Address<TNonceAccountAddress> : TNonceAccountAddress; recentBlockhashesSysvar?: Address<...>; nonceAuthority: TNonceAuthorityAddress extends string ? Address<...> : TNonceAuthorityAddress; }'

index.ts:13:5 - error TS2322: Type 'Address<TNonceAuthorityAddress>' is not assignable to type 'TNonceAuthorityAddress extends string ? Address<TNonceAuthorityAddress> : TNonceAuthorityAddress'.

13     nonceAuthority,
       ~~~~~~~~~~~~~~

  node_modules/.pnpm/@solana-program+system@0.1.0_patch_hash=go463mkopznrn5ptsqp4qlrd74_fastestsmallesttextencoderdecoder@1.0.22/node_modules/@solana-program/system/dist/types/src/generated/instructions/advanceNonceAccount.d.ts:46:5
    46     nonceAuthority: TAccountNonceAuthority extends string ? Address<TAccountNonceAuthority> : TAccountNonceAuthority;
           ~~~~~~~~~~~~~~
    The expected type comes from property 'nonceAuthority' which is declared here on type '{ nonceAccount: TNonceAccountAddress extends string ? Address<TNonceAccountAddress> : TNonceAccountAddress; recentBlockhashesSysvar?: Address<...>; nonceAuthority: TNonceAuthorityAddress extends string ? Address<...> : TNonceAuthorityAddress; }'


Found 2 errors in the same file, starting at: index.ts:12

Repro

https://github.com/steveluscher/kinobi-address-type-bug-repro

Sandbox

Fixed by #182 as getXInstructionRaw no longer exists which means we no longer need these extends string | AccountMeta type parameters.