打字稿否定了void:强制函数返回不为无效

时间:2019-02-21 17:08:08

标签: typescript

如何确保函数在打字稿中返回某物

由于voidany的子类型,因此从void中排除any的泛型似乎都不起作用。

我当前的解决方法是:

type NotVoid = { [key: string]: NotVoid } | object | string | boolean | symbol | number | null | undefined

以上内容似乎很冗长。我希望有更好的方法!

我知道有一个否定提案,但我今天想实现,它必须是打字稿,而不是掉毛规则。谢谢!

1 个答案:

答案 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)的情况生成错误。