One can do:
julia> similartype(Matrix{Float64}, (2, 2, 2))
Array{Float64, 3}
but it would be nice to have something in the type domain, like:
julia> similartype(Matrix{Float64}, Val(3))
or a more specific type than Val, like NDims:
julia> similartype(Matrix{Float64}, NDims(3))
related to the proposal for basing similar around traits here: JuliaLang/julia#18161.