当我们可以用它来断言我们知道的关于我们的代码的真实情况时,Typescript是最有用的。然而,有时候,要找出正确的咒语来实现这一目标是很困难的。
在这篇文章中,我们将学习如何根据一个函数的输入类型来决定其输出类型。
一个例子
让我们创造一个假想的例子。我们将有一个函数flipType ,它接受一个number 或string 作为参数。如果参数是number ,返回类型应该是string ,如果参数是string ,返回类型应该是一个数字。
如果我们试图天真地实现这一点,它可能看起来像这样。
function flipType(arg: number | string): number | string {
if (typeof arg === 'string') {
return 5;
}
return 'some string';
}
这可以编译得很好,但它并不像我们希望的那样工作--当我们调用函数时,它并没有缩小我们函数的返回类型。比如说。
const result1 = flipType('hello');
const result2 = flipType(5);
result1 应该是一个 类型, 应该是一个 类型,但是它们没有被缩小,而是变成了 类型。number result2 string number | string
重载的拯救
我们在这里得到了函数重载的帮助。函数重载让你在函数的实际声明之前就为其定义不同的情况。
让我们通过我们的例子来看看函数重载的作用。
function flipType(arg: string): number;
function flipType(arg: number): string;
function flipType(arg: number | string) {
if (typeof arg === 'string') {
return 5;
}
return 'some string';
}
我们通过使用函数重载语法定义了两种不同的情况:如果我们的arg 是一个string ,则返回类型应该是number ,反之亦然。
现在我们可以使用这个函数,并获得知道返回变量的确切类型的优势