Skip to content
On this page

声明函数

  1. 通过变量声明:
typescript
let add: (x: number, y: number) => number
  1. 通过接口声明:
typescript
interface Add {
     (x: number, y: number): number
 }
  1. 通过类型别名声明:
typescript
type Add = (x:number , y: number) => number

typeinterface 多数情况下有相同的功能,就是定义类型。

TIP

type:不是创建新的类型,只是为一个给定的类型起一个名字。type还可以进行联合、交叉等操作,引用起来更简洁。

interface:创建新的类型,接口之间还可以继承、声明合并。

建议优先使用 interface。

混合接口

声明:

typescript
interface Lib {
    (): void;
    version: string;
    doSomeThing(): void;
}

构造器:

typescript
function getLib() {
    let lib: Lib = (() => {}) as Lib
    lib.version = '1.0'
    lib.doSomeThing = () => {}
    return lib;
}

使用:

typescript
let lib1 = getLib();
lib1();
lib1.doSomeThing();
let lib2 = getLib();

可选参数

通过 ? 来声明。

typescript
function add5(x: number, y?: number) {
    return y? x + y : x;
}

剩余参数

typescript
function add6(x: number, ... rest: number[]) {
    return x + rest.reduce((pre, cur) => pre + cur) 
}

参数默认值:

typescript
function add7(x: number, y = 0, z: number, q =1) {
    return x + y + z + q;
}
add6(1, undefined, 3)

注意:

必选参数前面的默认参数是不可省略的,需传入 undefined 来获取它的默认值; 必选参数后面的默认参数是可以省略的。

函数重载

函数重载的好处:不需要为功能相似的函数起不同的名称。

ts 实现函数重载的时候,要求定义一系列的函数声明

typescript
function add8(...rest: number[]): number;
function add8(...rest: string[]): string;
function add8(...rest: any[]): any {
    let first = rest[0];
    if(typeof first === 'string') {
        return rest.join('')
    }
    if(typeof first === 'number') {
        return rest.reduce((pre, cur) => pre + cur)
    }
}