函数类型
let greetUnnamed: (name: string) => string
greetUnnamed = function (name: string): string {
if (name) {
return `Hi!${name}!`
}
}
首先声明了一个变量greetUnnamed,该变量的类型是一个包含String类型参数,调用后返回String类型数据的函数。
在声明这个变量以后,一个符合改变量类型的函数被赋值给了这个函数。
这个函数还可以在一行中完成,如下:
let greetUnnamed: (name: string) => string = function (name: string): string {
if (name) {
return `Hi!${name}!`
}
}
可选参数
一般在使用函数的时候,有的时候并不会传递所有的函数参数,可以使用选择形参的方式书写
function add(a: number, b: number, c?: number): number {
let sum = a + b
if (c !== undefined) {
sum += c
}
return sum
}
这个函数里面就用到了可选形参,即在形参 ***c?***,调用add的时候,对应的实参c可以不用传递。
默认参数
一般在使用函数的时候,有的时候形参会有默认的值,可以使用默认实参的方式书写
function add(a: number, b: number = 0, c?: number) {
let sum = a + b
if (c !== undefined) {
sum += c
}
return sum
}
调用这个函数的时候,b的默认值就是0
函数重载
类似java中的@Overwrite,TS中可以进行方法的重载
function test(name: string): string; // 重载签名
function test(age: number): string; // 重载签名
function test(value: (string | number)): string { // 实现签名
swicth(typeof value) {
case 'string':
return `My name is ${value}!`
case 'number':
return `I'm ${age} years old.`
default:
console.log('Invalid Operation!')
}
}
特定的重载签名
interface Document {
createElement(tagName: 'div'): HTMLDivElement // 特定重载签名
createElement(tagName: 'span'): HTMLSpanElement // 特定重载签名
createElement(tagName: 'canvas'): HTMLCanvasElement // 特定重载签名
createElement(tagName: string): HTMLElement // 非特定重载签名
}
当编写重载签名的时候,必须在最后列出非重载签名