Based on the input by @Kusalananda and @stéphane-chazelas I try to answer the question myself.
The shell is a command line interpreter. It does not strictly type the input tokens. The treatment depends on the context. There are two reasonable answers:
Answer 1
The tilde has no "kind of language construct" at all, because there are is no typing when the input of the shell is interpreted. Based on the context the input is treated dynamically.
Answer 2
The type of the tilde comes most closes to a virtual type of "path". In the typical context it is expanded to the home directory, which gives a nature similar to a variable, while it is none.
Rationale of Answer 1
Even flow control tokens are not typed on the Bash:
echo while
This is not an error. It just prints "while" in this context.
Depending on the context the tilde is treated differently. Typically it is expanded to the users home directory:
echo ~
In other contexts it is not expanded:
echo "~"
echo ~~
Rationale of Answer 2
The POSIX definition speaks of the unquoted tilde as a "word". In the normal case it is expanded to the home directory by the shell before being used by the shell itself as a path or before given as argument to other programs.
Used as path of an executable:
~/bin/myprogram
Used as path in an argument:
ls ~
Even expanded to the home directory before being passed as an argument, that does not need to be a path:
echo ~
Again in the typical use case, in the shell unquoted words are used as paths and quoted words as string arguments. Each call to an executable is a relative path to $PATH. Hitting extends the words based on the paths in the file system.
** Summary **
You can use the shell in non-typical-way. For example you can use quoted strings as paths to executables:
"echo" echo
This print's echo. The typical use of quoted and unquoted is inverted.
Rationale of Answer 2 is based on conventions not on real typing. The architecture of the shell is a dynamic one.