3
関数が任意のオブジェクトを受け入れるように指定する方法はありますか?を除く引数の場合は?プロミス以外のオブジェクト?
は(私が行方不明「待つ」というキーワードをキャッチするようにコンパイラにしたいと思います。)
関数が任意のオブジェクトを受け入れるように指定する方法はありますか?を除く引数の場合は?プロミス以外のオブジェクト?
は(私が行方不明「待つ」というキーワードをキャッチするようにコンパイラにしたいと思います。)
はい、一種の。オプションのvoidタイプでこれらのプロパティを宣言することによって、特定のプロパティを持つオブジェクト型を禁止するトリックがあります:
type NotAPromise = { then?: void };
function f(o: NotAPromise) {
}
f(1); // ok
f({}); // ok
f(Promise.resolve(2));
Argument of type 'Promise<number>' is not assignable to parameter of type 'NotAPromise'.
Types of property 'then' are incompatible.
Type '{ (onfulfilled?: (value: number) => number | PromiseLike<number>, onrejected?: (reason: any) => n...' is not assignable to type 'void'.
それがあれば、この1
f({ then: 42 });
のような有効な非約束を拒否しますので、これは、粗むしろありますこれは今まであなたがNotAFunctionがthis answerから来ているこの
type NotAPromise = { then?: NotAFunction };
ようにそれを宣言しようとすることができる問題となります。