函数

作者: DeadMoon | 来源:发表于2021-12-30 20:16 被阅读0次

    typeScript的函数是在es6的函数特性的基础上加了一些后端的概念:泛型、参数类型声明、返回值类型声明、重载等特性

    js 中声明一个函数如下:

    // 函数声明
    function log(msg) {
      return msg
    }
    // 函数表达式
    const log = function (msg) {
      return msg
    }
    // 箭头函数
    const log = msg => msg
    

    上面的函数在 typescript 表现如下:

    // 声明一个函数一定需要加入类型校验
    // 函数声明
    function log(msg: string): string {
      return msg
    }
    // 函数表达式
    const log: (msg: string) => string = function (msg: string): string {
      return msg
    }
    // 箭头函数 
    const log: (msg: string) => string = (msg: string): string => msg
    or
    const log: { (msg: string): string } = (msg: string): string => msg
    

    不同于 js 的是 typescript 定义类型后一定要严格的按照约定传入参数数量及类型, 否则编译器会抛出异常

    function log(msg: string): string {
      return msg
    }
    log(1)   // 类型“number”的参数不能赋给类型“string”的参数。ts(2345)
    log('hello world')  // good
    
    可选参数, 默认参数和剩余参数

    js中如果函数定义了两个参数,但是在调用时只传入一个参数(未传的参数当做 undefined 解析), 函数依旧会被正常调用, 但是在 ts 中却是不行的, 如果想这么做, 需要将属性置为可选属性

    // 可选参数通过属性前加上?实现
    // 需要注意的是   必选参数不能位于可选参数后。js 是可以的
    function fullName(firstName: string, lastName?: string): string {
      return firstName + lastName
    }
    // 默认参数, 默认参数会当做可选参数处理
    function fullName(firstName: string, lastName = 'world'): string {
      return firstName + lastName
    }
    // 需要注意的是, 可选参数 同 js 表现一样 一定是 undefined 才会生效
    fullName('hello') // hello world
    fullName('hello', null) // hellonull
    // 剩余参数同 es6, 剩余参数必须位于参数最后, es6解构也是如此
    function total(defaultValue: number, ...list: number[]) {
      return list.reduce((pre, cur) => pre + cur, defaultValue)
    }
    
    函数重载

    不同于 js, ts支持重载, 所谓重载是名称相同并且参数数量类型不同创建多个方法的能力

    function greetNane (name:string) :string;
    function greetNane (name:number) :number;
    function greetNane (name:boolean) :boolean;
    // 下面参入的类型一定要包含上面所有的情况
    function greetNane (name: string|number|boolean): string|number|boolean{
      return name
    }
    

    虽然 typeScript 支持 函数重载, 但是就个人理解而言,使用泛型接口来实现可能更好一点

    相关文章

      网友评论

          本文标题:函数

          本文链接:https://www.haomeiwen.com/subject/rmavqrtx.html