How to define NamedTuple type with variable number of elements?

hello, how to define NamedTuple type with variable number of elements?

(:a, :b) isa NTuple{N,Symbol} where N  # -> true 
(1, 2) isa NTuple{N,Int} where N  # -> true

why ?

(a=1,b=2) isa NamedTuple{NTuple{N,Symbol}, NTuple{N,Int}} where N  # -> false
1 Like

A NTuple is not the same as a NamedTuple.

julia> (a=1,b=1) |> typeof
NamedTuple{(:a, :b), Tuple{Int64, Int64}}

julia> NamedTuple{(:a,:b)}((1,1))
(a = 1, b = 1)
1 Like

To make @fatteneder 's remark perhaps clearer:
NamedTuple parameters are not types! They are actual tuples.
So: NTuple{N,Symbol} where N is a type, and not the needed parameter for the NamedTuple.

1 Like

but

Tuple{Int, Int} <: NTuple{N,Int} where N  # -> true
Tuple{Symbol, Symbol} <: NTuple{N,Symbol} where N  # -> true

The closest to what you wrote I got is:

(a=1,b=2) isa NamedTuple{keys, <:Tuple{Vararg{Int,N}}} where {keys, N} # true

Note:

(:a, :b) <: NTuple{N,Symbol} where N # error
(:a, :b) isa NTuple{N,Symbol} where N # true
1 Like

thank you

thanks too. I always learn nuances of Julia from thinking about such questions