如何使用强制参数将函数声明为类型

时间:2019-09-22 14:07:51

标签: typescript

我声明了一个类型,该类型是一个函数,它接受一个Person类型的参数并返回一个Person。

我没有指定参数是可选的,那为什么打字稿允许我向他传递不带参数的函数?

type Patcher = (key: Person) => Person;

function doSomething<T>(patcher: Patcher){
   console.log('hello world');
}

doSomething<Person>(() => { // Here I pass empty parameter but typescript doesn't complain
    console.log('Hello world 2');
    return {
        firstName: 'john',
        age: 10
    }
})


interface Person{
    firstName: string;
    age: number;
}

我正在使用上一个打字稿版本

1 个答案:

答案 0 :(得分:0)

TypeScript不会对您大喊大叫。

如果要添加未使用的参数,会有所作为吗?

doSomething<Person>((personThatWouldNotBeUsed) => {
    console.log('Hello world 2');
    return {
        firstName: 'john',
        age: 10
    }
})

您说“我期望一个以Person作为参数,并返回一个Person作为结果的函数”仅表示您将调用 Person对象,您将返回的结果视为Person对象。函数是否实际使用提供的参数完全取决于它。


TL; DR-您不能强制使用者传递的回调使用所有参数,也不能。消费者可以决定是否要使用提供的参数。