类型定义

在以下的代码中,我们定义了函数的输入参数的类型与返回值的类型。

function sum(x: number, y: number): number {
    return x + y
}

sum(1, "2") // Argument of type 'string' is not assignable to parameter of type 'number'.

let result: string = sum(1, 2) // Type 'number' is not assignable to type 'string'.

let n: number = sum(1, 2) // ok

$$tip

与 JavaScript 不同的是,TypeScript 中参数的数量也要匹配,不能少也不能多。

$$

function sum(x: number, y: number): number {
    return x + y
}

sum(1) // An argument for 'y' was not provided.
sum(1, 2, 3) // Expected 2 arguments, but got 3.

可选参数

我们有时需要一个非必需的参数,可以加上问号定义一个可选参数。

function sum(x: number, y: number, z?: number): number {
    if (z) {
        return x + y + z
    }
    return x + y
}

sum(1, 2) // 3
sum(1, 2, 3) // 6

$$warning

可选参数必须跟在必须参数的后面。

$$

参数默认值

也可以像 JavaScript 中的一样,给参数一个默认值。

function sum(x: number, y: number = 10): number {
    return x + y
}

sum(2) // 12

剩余参数

在 JavaScript 中可以通过 ... 来收集剩余参数,这些剩余参数是一个数组 ,因为也可以给它一个类型定义。

function sum(...arr: number[]): number {
    return arr.reduce((x, y) => x + y)
}

sum(1, 2, 3) // 6