下面来说一下在函数中的断言,首先来看下面的代码:
let func3 = ()=> {const str: string = 'hello,TypeScript';const fn = (x:number, y:number): number=> x + y;return [str, fn];}
上面的代码中,定义了一个函数,函数的返回值是一个数组,数组的类型为string和Function。
此时调用函数并且接收参数。
// 以解构赋值的形式来接收函数的参数
let [s1, f1] = func3();
当我们以解构赋值的形式接收了函数的返回值后,s1和f1的类型变成了和函数返回值的类型相同的类型:


此时作为开发者,我们是知道f1是一个函数的,但是ts却识别不出,此时如果直接调用f1,那么程序就会出现错误。

解决这个问题,可以使用断言。
let [s1, f1] = func3();
(f1 as Function)(10,20);
也可以采用下面这种写法:
let [s1, f1] = func3() as [string, Function];
f1(10, 20);

当然,在构建函数的初期,还可以直接指定返回值的类型,这样也可以避免出现的问题。
let func3 = (): [string, Function] => {
const str: string = 'hello,TypeScript';
const fn = (x: number, y: number): number => x + y;
return [str, fn];
};
// 以解构赋值的形式来接收函数的参数
// let [s1, f1] = func3() as [string, Function];
let [s1, f1] = func3();
f1(10, 20);
如果想要在函数调用的时候,获得更加清楚的参数提示,也可以在定义函数的时候或者在进行类型断言的时候,设置好参数和返回值的类型。
第一种情况,在定义函数的时候,设置函数的返回值:
第二种情况,在进行类型断言的时候,设置函数的返回值:

第三种情况,在编写函数的过程中,可以在return 语句的后面加上类型断言。

或者直接在return的后面使用typeof也是可以的。
该种写法和上面的写法效果是相同的。
最简单的方法,是可以直接将返回值变为元组,效果和之前的写法相同。
