TS中的函数与可调用注解
为参数添加注解
在TS中,我们可以为函数的参数添加注解。
为函数返回值添加注解
类似于为函数的参数添加注解,TS也支持为函数的返回值添加注解。(但是一般我们不需要为函数的返回值添加注解,因为TS编译器会自动推断)。
- 如果我们想要定义一个不返回值的函数,那么可以将函数返回值的类型定义为void。
可选参数
我们可以使用 ? 将某个参数定义为可选的参数。
我们也可以为参数提供一个默认值。(在参数类型声明的后面使用 = initalValue)。
函数重载
函数重载的作用
- 函数重载通过定义多个同名函数,但是形参不同,而实现,当传入参数不同时,函数将执行不同的逻辑。
声明函数
在没有提供函数实现的情况下,有2种方法可以声明函数。
-
type LongHand = { (a: number): number }
- 如果想使用函数重载,必须使用这种方法。(因为这种方法可以通过内联注解声明多个函数类型)。
-
type LongHand = (a: number) => number
- 这种方法可以用于Vue data域 中的函数类型的响应式数据的类型声明。
可调用
TS支持我们使用类型别名或接口来定义一个可被调用的类型注解。
- interface returnString{ (): string }
- 这个接口定义了一个可调用注解,它表示一个返回值为 string 的函数。
可调用类型注解有3种情况
- 使用interface定义一个一个或多个可调用注解,当定义多个可调用注解时,可以使用函数重载。
interface Overload{
(a: number): number,
(a: string): string,
}
function stringOrNumber(foo: number): number
function stringOrNumber(foo: string): string
function stringOrNumber(a: any): any
{
if(typeof a === 'number')
{
return a*a;
}
else if(typeof a === 'string')
{
return 'hello' + a;
}
}
const func: Overload = stringOrNumber;
const str = func("TS")
const num = func(2)
console.log(str)
console.log(num)
-
TS允许使用箭头函数定义可调用注解,但是使用箭头函数将无法使用函数重载。
-
可实例化的可调用注解。
- 它在可调用注解的前面加上了 new 关键字,这表示我们需要使用 new 来调用这个可调用注解。
可调用注解的作用
-
可调用注解可以用于声明函数重载。
- 使用接口或类型别名定义多个可调用注解。
-
可调用注解可以用于快速声明函数类型或在Vue的data中声明一个响应式的函数数据。
- 使用箭头函数可以实现。
-
可调用注解可以用于声明构造函数。
- 使用可实例化的可调用注解实现。