有没有办法指定函数接受任何Object ,除了参数的Promise?
(我希望编译器能够找到丢失的#34;等待"关键字。)
答案 0 :(得分:4)
是的,有点儿。通过使用可选的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'.
这是相当粗糙的,因为它会拒绝像这样的有效非承诺
f({ then: 42 });
如果这成为一个问题,你可以试着像这样宣布它
type NotAPromise = { then?: NotAFunction };
其中NotAFunction来自this answer。