1

如何确保函数在打字稿中返回某些内容?

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

我目前的解决方法是:

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

以上似乎相当冗长。我希望有更好的方法!

我知道有一个否定的提议,但我今天想实现这一点,它必须是打字稿,而不是 linting 规则。谢谢!

4

1 回答 1

2

也许这样的事情会起作用:

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)

于 2019-02-21T17:18:36.653 回答