如何在打字稿中强制执行功能类型

时间:2019-07-25 18:27:11

标签: typescript

TypeScript版本3.5.1

Playground

对于需要发送参数的函数,我有一个简单的类型。但是,当我声明该类型的函数时,如果未指定任何参数,TypeScript编译器不会发出任何抱怨。这是一个简单的例子。

interface IArgs {
  foo: number;
}

type MyFunc = (args: IArgs) => Promise<any>;

// why doesnt this complain?
// there is no first argument specified.
const fn: MyFunc = async() => { };

/*
  uncommenting the following line will make the ts compiler 
  complain like it should, but it should've complained in
  the above declaration as well?
*/

// fn();

如何让TypeScript编译器抱怨函数声明中缺少参数?

1 个答案:

答案 0 :(得分:1)

好问题!

我认为这是在这里刻意设计的打字稿。

选择在函数中不使用参数是有效的,但是在调用函数时省略参数是无效的。

使用点击处理程序,例如:

type ClickHandler = (evt: MouseEvent) => any

// Valid uses:
element.onClick = () => doSomething()
element.onClick = (evt) => doSomething(evt.target.value)

但是,由于某些ClickHandler函数可能使用该参数,而有些则可能不使用该参数,因此始终必须提供该参数。

const fn: ClickHandler = () => {}
fn() // typescript error