#compdef which whence where type

local args

args=( "$@" )

_alternative -O args \
  'commands:external command:compadd - ${(k@)commands}' \
  'builtins:builtin command:compadd - ${(k@)builtins}' \
  'functions:shell function:compadd - ${(k@)functions}' \
  'aliases:alias:compadd - ${(k@)aliases}' \
  'reserved-words:reserved word:compadd - ${(k@)reswords}'
