如何确保函数在打字稿中返回某物?
由于void
是any
的子类型,因此从void
中排除any
的泛型似乎都不起作用。
我当前的解决方法是:
type NotVoid = { [key: string]: NotVoid } | object | string | boolean | symbol | number | null | undefined
以上内容似乎很冗长。我希望有更好的方法!
我知道有一个否定提案,但我今天想实现,它必须是打字稿,而不是掉毛规则。谢谢!
答案 0 :(得分:0)
也许这样的事情会起作用:
type NotVoid<T extends Function> = (() => void) extends T ? never : T;
const f = <T extends Function>(func: NotVoid<T>) => func();
f(() => 0) // ok
f(() => {}) // Error: Argument of type '() => void' is not assignable to parameter of type 'never'.
不幸的是,这还会为f(() => undefined)
和f(() => null)
的情况生成错误。