Skip to content

Commit 79ceb8d

Browse files
authored
Define valtype(::NamedTuple) and keytype(::NamedTuple) (#46555)
1 parent a229fbd commit 79ceb8d

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

base/namedtuple.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ eltype(::Type{T}) where T<:NamedTuple = nteltype(T)
219219
nteltype(::Type) = Any
220220
nteltype(::Type{NamedTuple{names,T}} where names) where {T} = eltype(T)
221221

222+
keytype(@nospecialize nt::NamedTuple) = keytype(typeof(nt))
223+
keytype(@nospecialize T::Type{<:NamedTuple}) = Symbol
224+
225+
valtype(@nospecialize nt::NamedTuple) = valtype(typeof(nt))
226+
valtype(@nospecialize T::Type{<:NamedTuple}) = eltype(T)
227+
222228
==(a::NamedTuple{n}, b::NamedTuple{n}) where {n} = Tuple(a) == Tuple(b)
223229
==(a::NamedTuple, b::NamedTuple) = false
224230

test/namedtuple.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ end
8484
@test eltype(NamedTuple{(:x, :y),Tuple{Union{Missing, Int},Union{Missing, Float64}}}(
8585
(missing, missing))) === Union{Real, Missing}
8686

87+
@test valtype((a=[1,2], b=[3,4])) === Vector{Int}
88+
@test keytype((a=[1,2], b=[3,4])) === Symbol
89+
8790
@test Tuple((a=[1,2], b=[3,4])) == ([1,2], [3,4])
8891
@test Tuple(NamedTuple()) === ()
8992
@test Tuple((x=4, y=5, z=6)) == (4,5,6)

0 commit comments

Comments
 (0)