函数声明

函数声明对参数类型, 返回值类型定义,没有返回值定义为void

//必传x,y并且类型都为number,返回值为布尔
function fun1(x:number,y:number):boolean{return x>y
}
fun1(1,3)

没有返回值定义为void:

//不返回值,类型为void
function fun1(x:number,y:number):void{console.log(x,y)
}

参数可传可不传 并添加默认值:

//x必传,y为可传可不传 默认值为1; 返回值为数组类型,数组的每个值为number
function fun1(x:number,y:number=1):number[]{return [x,y]
}
fun1(2)
//报错,返回的x.length一定是定义的所有类型计划都满足有length方法的,但是number没有length。
function fun1(x:string|number):number{return x.length
}

泛型函数

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

  • 泛型是指在定义函数,接口,类的时候,不预先指定具体的类型,而在使用的时候指定类型的一种特性。

  • 泛型<T> T类型变量,表示任何类型。帮助我们捕获用户传入的类型(比如:number)

  • 传入泛型用 <number>,尖括号括起来的

  • 创建泛型函数时,编译器要求你在函数体必须正确的使用这个通用的类型

//添加类型变量T,T帮助我们捕获用户传入的类型(比如:number)
//参数类型为T,返回值类型为T
function fun1<T>(x: T): T {return x;
}
//这里传入T为string类型
fun1<string>('a')

创建泛型函数时,编译器要求你在函数体必须正确的使用这个通用的类型:

//报错   因为T类型变量代表的是任意类型,所以使用这个函数的人可能传入的是个数字,而数字是没有 .length属性的。
function fun5<T>(x: T): T {return x.length;
}

可传入多个类型变量:

function fun1<T, W>(x: T,y:W): W {return y
}
fun1<string, boolean>('1',false)

泛型约束

泛型约束可以通过(interface)接口+extends来实现约束。

interface Len{length: number
}
//T继承接口Len,代表实参必须有length这个属性才可以
funtion fun<T extends Len>(args:T):T{return args.length
}
fun("abc") // 3  字符串是有length属性的
fun({})//报错,因为对象本身没有length属性
fun({length:5}) //不报错
fun(4)//报错,number数据没有length属性
fun(null)//报错

ts 函数声明及泛型函数相关推荐

  1. c 函数多次声明_C++核心准则C.132:不要没有理由就将函数声明为虚函数

    岫玉 C.132: Don't make a function virtual without reason C.132:不要没有理由就将函数声明为虚函数 Reason(原因) Redundant v ...

  2. C++友元函数 普通函数声明为友元函数

    友元函数 如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数),在对本类进行声明时,在类体中用friend对该函数进行声明,此函数就称为本类的&q ...

  3. php 函数声明2,php 函数返回值声明

    php7 支持函数返回值声明.就像下面这样: function sum($a, $b): float { return $a + $b; } // Note that a float will be ...

  4. 把类的成员函数声明为友元函数,但不能访问私有成员的原因和解决办法

    定义类X,类Y,在类X中声明类Y的成员函数g()为类X的友元函数 常见的几种错误写法及原因: 错误写法1 class Y; class X {public:X(int i) :i(i) {}frien ...

  5. C++_函数的定义_函数调用_值传递_函数常见的样式_函数声明(重要)_函数分文件编写---C++语言工作笔记022

    然后再去看函数,只看重点部分,笔者有一定的java经验,.net经验,所以文档中太多简单的部分,就不细说了. 结构跟java差不多一样的. 可以看到格式跟java是一样的

  6. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  7. 函数声明(函数原型)的一些关键技巧

    当编译器遇到一个函数调用时,它产生代码传递参数并调用这个函数,而且接收该函数返回的值(如果有的话).但编译器是如何知道该函数期望接受的是什么类型和多少数量的参数呢?如何知道函数返回值的类型呢? 如果没 ...

  8. js函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  9. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

最新文章

  1. 利用MATLAB帮助求解作业中的Laplace变换和Z变换
  2. jQuery的on绑定click和直接绑定click区别
  3. WCF服务编程 学习笔记(1)
  4. java debug try catch 打印发生错误的代码的详细信息 代码行数
  5. 感受野,以及为什么神经网络可以分清猫是猫,狗是狗的直观理解
  6. mysql bit_or() bit_count()函数
  7. 快进来,详解MySQL游标
  8. 14届数独-真题标准数独-Day 3-20220118
  9. shping cloud搭建大觅网-之sping cloud初体验
  10. Web功能测试主要包括哪些方面?
  11. Windows基础 主机加固
  12. 【GEO数据库】数据
  13. CC2530模块进行ZigBee实验小结
  14. Mysql主从延时-Multi-threaded slave statistics for channel
  15. word中最后一行留白太多
  16. python熊猫小课_Python-机器学习小项目
  17. 前端学习(三)UI设计
  18. LeetCode 908 题解
  19. 人工智能机器人制造的研发之路
  20. 【计算机毕设】前端文件结构

热门文章

  1. Hadoop学习之HDFS架构(二)
  2. 手机控制树莓派linux,怎样用PC或手机远程控制树莓派
  3. vector can通信源码_汽车电子CAN网络dbc文件
  4. python中nltk_python2.7和NLTK安装详细教程
  5. Python入门100题 | 第006题
  6. Numpy中的array
  7. python type函数
  8. 【LeetCode从零单排】No.9 Palindrome Number
  9. 【算法与数据结构】查找二叉树的实现
  10. MaxCompute+ Geabase 大话健康知识图谱取经之路