接口定义

可以使用接口的方式来定义一个函数需要符合的形状。

  1. interface Fn {
  2. (x: number): string
  3. }
  4. const fn: Fn = function (x) {
  5. return '1'
  6. }

重载

JavaScript 中方法的重载:重载指的是两个或者两个以上同名函数,但它们的参数不一样,这时会出现函数重载的情况。
Typescript 中的重载:通过为同一个函数提供多个函数类型定义来实现多种功能的目的。
ES5 中出现同名方法,下面的会替换上面的方法:

  1. function getInfo(name) {}
  2. function getInfo(name, age) {}

Typescript 中的重载:

  1. 单个参数,不同类型。

    1. function getInfo(name: string): string;
    2. function getInfo(age: number): string;
    3. function getInfo(str: any): any {
    4. if (typeof str === "string") {
    5. alert(`姓名:${str}`);
    6. } else {
    7. alert(`年龄:${str}`);
    8. }
    9. }
    10. getInfo("张三");
    11. getInfo(18);
    12. getInfo(true); // 错误的写法
  2. 多个参数,可选参数。

    1. function getInfo(name: string): string;
    2. function getInfo(name: string, age: number): string;
    3. function getInfo(name: string, age?: number): void {
    4. if (age) {
    5. alert(`姓名:${name},年龄:${age}`);
    6. } else {
    7. alert(`姓名:${name}`);
    8. }
    9. }
    10. getInfo("张三");
    11. getInfo(18); // 错误
    12. getInfo("李四", 20);