zoukankan      html  css  js  c++  java
  • TypeScript学习笔记--函数function

    函数 function
    在ts中,函数是主要的定义 行为的地方。 TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用。

    声明方式

    在 JavaScript 中,有两种常见的定义函数的方式——函数声明和函数表达式

    函数声明

    一个函数有输入和输出,要在 TypeScript 中对其进行约束,需要把输入和输出都考虑到。

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

    函数表达式

    let mySum = function (x: number, y: number): number {
        return x + y;
    };
    

    这两者是等价的,上面的代码只对等号右侧的匿名函数进行了类型定义,而等号左边的 mySum,是通过赋值操作进行类型推论而推断出来的

    let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
        return x + y;
    };
    

    注意:

    • 输入多余的(或者少于要求的)参数,是不被允许的,会报错
    • 在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。

    可选参数

    与接口中的可选属性类似,我们用 ? 表示可选的参数。需要注意的是,可选参数必须接在必需参数后面。换句话说,可选参数后面不允许再出现必需参数了

    let myName :(firstName:string,lastName?:string)=>void = function(firstName:string,lastName?:string):void{
      if (lastName) {
        console.log(firstName + ' ' + lastName);
      } else {
        console.log(firstName);
      }
    }
    

    默认参数

    可以按照平常的js给参数添加默认值,TypeScript 会将添加了默认值的参数识别为可选参数,同时这样也不受‘可选参数必须接在必需参数后面’的限制了。

    function buildName(firstName: string = 'Tom', lastName: string) {
      return firstName + ' ' + lastName;
    }
    let tomcat = buildName('Tom', 'Cat');
    let cat = buildName(undefined, 'Cat');
    

    剩余参数

    在js中,arguments可以代表函数的所有的参数,可以在函数内获取所有参数。ES6 中,可以使用 ...rest 的方式获取函数中的剩余参数(rest 参数)。同样的,ts也是支持...rest的方式。

    function push(array: any[], ...items: any[]) {
      items.forEach(function(item) {
          array.push(item);
      });
    }
    
    let a_function:number[] = [1,2,3];
    push(a_function, 1, 2, 3);
    

    剩余参数本身就是个数组,也需要进行类型声明。

    函数重载

    什么是函数重载:两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。

    function reverse(x: number): number;
    function reverse(x: string): string;
    function reverse(x: any): any{
      if (typeof x === 'number') {
          return Number(x.toString().split('').reverse().join(''));
      } else if (typeof x === 'string') {
          return x.split('').reverse().join('');
      }
    }
    

    上例中,我们重复定义了多次函数 reverse,前几次都是函数定义,最后一次是函数实现。在编辑器的代码提示中,可以正确的看到前两个提示。
    注意,TypeScript 会优先从最前面的函数定义开始匹配,所以多个函数定义如果有包含关系,需要优先把精确的定义写在前面。

    this

    在js中this可以通过上下文得知this的指向,在ts中,若不表明类型则容易报错。

    • 在普通的函数里,可以在参数列表里最前面添加this:any,指定假的参数,不影响
    • 在class中,可以在参数列表中this可以指定当前的class类

    总结

    emmm,开头的一句话:TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用,还有规范
    我把笔记和例子放到GitHub里了,如需要可以去看看,有什么不对的地方,欢迎指正,大家一起进步加油。

    参考文献

    TypeScript 入门教程
    TypeScript 中文手册

  • 相关阅读:
    按enter执行click或者搜索问题
    网络搜集-获取文件大小
    js获取文件大小
    JQuery UI Autocomplete与jquery.autocomplete.js
    如何在 IIS 中设置 HTTPS 服务
    什么是大数据(二)—涉及行业
    什么是大数据(一)
    未能加载文件或程序集“ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=n
    安装数据库出现错误vc_red.msi找不到
    网页兼容性注意事项
  • 原文地址:https://www.cnblogs.com/sqh17/p/13825336.html
Copyright © 2011-2022 走看看