キーをオプショナルにするとき、? をつけます。
全てのキーをオプショナルにするときは、Partial<T> を使います。
それでは、キーがオプションか、もしくはnullのときはどうするか?わたしは Maybe<T> というジェネリックなタイプを作って設定しています。
Redis等で null が返ってくるときの設定がこれで楽にできます。
あとは、例えば function であるタイプ (e.g. T) を返す場合、条件に満たない場合は undefined を返す場合はあると思います。その時もただ単に function hoge(key: string): Maybe<T> {...} とすれば良いです。