作者:Yuan Tang
更新于:5 个月前
字数统计:378 字
阅读时长:1 分钟
如果一个变量要套用另一个函数类型,有一个小技巧,就是使用typeof
运算符。
function add(
x:number,
y:number
) {
return x + y;
}
const myAdd:typeof add = function (x, y) {
return x + y;
}
这是一个很有用的技巧,任何需要类型的地方,都可以使用typeof
运算符从一个值获取类型。
函数类型还可以采用对象的写法。
let add:{
(x:number, y:number):number
};
add = function (x, y) {
return x + y;
};
上面示例中,变量add
的类型就写成了一个对象。
函数类型的对象写法如下。
{
(参数列表): 返回值
}
注意,这种写法的函数参数与返回值之间,间隔符是冒号:
,而不是正常写法的箭头=>
,因为这里采用的是对象类型的写法,对象的属性名与属性值之间使用的是冒号。
这种写法平时很少用,但是非常合适用在一个场合:函数本身存在属性。
function f(x:number) {
console.log(x);
}
f.version = '1.0';
上面示例中,函数f()
本身还有一个属性version
。这时,f
完全就是一个对象,类型就要使用对象的写法。
let foo: {
(x:number): void;
version: string
} = f;
函数类型也可以使用 Interface 来声明,这种写法就是对象写法的翻版,详见《Interface》一章。
interface myfn {
(a:number, b:number): number;
}
var add:myfn = (a, b) => a + b;
上面示例中,interface 命令定义了接口myfn
,这个接口的类型就是一个用对象表示的函数。