TypeScript 函数
- 一、TypeScript 函数
- 1、函数定义
- 1. es5 定义函数的方法
- 2. ts 中定义函数的方法
- 2、函数返回值
- 3、 带参数函数
- 4、可选参数
- 5、默认参数
- 6、剩余参数
- 7、函数重载
一、TypeScript 函数
1、函数定义
函数就是包裹在花括号中的代码块,前面使用了关键词 function:
1. es5 定义函数的方法
//函数声明法
function run() {
return 'run';
}
//匿名函数
var run2 = function(){
return 'run2';
}
2. ts 中定义函数的方法
// 函数声明法
function run():string {
return 'run';
}
//匿名函数
var fun2 = function():number{
return 123
}
函数只有通过调用才可以执行函数内的代码。
var fun2 = function():number{
return 123
}
fun2();
2、函数返回值
有时,我们会希望函数将执行的结果返回到调用它的地方。通过使用 return 语句可以实现,在使用 return 语句时,函数会停止执行,并返回指定的值。
语法格式如下所示:
function function_name():return_type {
// 语句
return value;
}
- return_type 是返回值的类型。
- return 关键词后跟着要返回的结果。
- 一般情况下,一个函数只有一个 return 语句。
- 返回值的类型需要与函数定义的返回类型(return_type)一致。
实例:
// 函数定义
function greet():string { // 返回一个字符串
return "Hello World"
}
function caller() {
var msg = greet() // 调用 greet() 函数
console.log(msg)
}
// 调用函数
caller()
实例中定义了函数 greet(),返回值的类型为 string。
greet() 函数通过 return 语句返回给调用它的地方,即变量 msg,之后输出该返回值。
3、 带参数函数
//1.函数声明法定义方法传参
function showInfo(name:string,age:number):string{
return `姓名:${name},年龄:${age}`
}
//let str = showInfo('小明',18)
//console.log(str); //打印结果为 姓名:小明,年龄:18
//2.匿名函数定义方法传参
var showInfo = function(name:string,age:number):string{
return `姓名:${name},年龄:${age}`
}
// let str = showInfo('小明',18)
// console.log(str); //打印结果为 姓名:小明,年龄:18
一般情况下,一个函数只有一个 return 语句。
没有返回值的方法
function run():void{
console.log('run')
}
run();
4、可选参数
在ES5里面方法的实参和形参可以不一样,但在ts中必须一样,如果不一样就需要配置可选参数。
function disp(name:string,age?:number):string{
if(age){
return `姓名:${name},年龄:${age}`
}else{
return `姓名:${name},年龄:保密`
}
}
console.log(disp("夏末",20));
console.log(disp("夏至"));
ts 中使用❓配置可选参数,可选参数必须配置到参数的最后面,如果上例我们想让 name 是可选的,age 必选,那么就要调整它们的位置,把 name 放在后面, 如果都是可选参数就没关系。
5、默认参数
可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数,注意:参数不能同时设置为可选和默认。
语法格式为:
function function_name(param1[:type],param2[:type] = default_value) {
}
实例:
function disp(name:string,age:number=20):string{
if(age){
return `姓名:${name},年龄:${age}`
}else{
return `姓名:${name},年龄:保密`
}
}
console.log(disp("夏末"));
以上实例函数的参数 age 设置了默认值为20,调用该函数时如果未传入参数则使用该默认值:
若给age 赋新值,那么结果就赋了新值:
console.log(disp("夏末",18));
6、剩余参数
当我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义。剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。
function sum2(a:number,...args:number[]){
let sum = 0;
for(const k of args){
sum = sum + k;
}
console.log("a=",a);
return sum;
}
let t = sum2(10,20,30)
console.log(t);
结果中sum 和为除了a 之外的所有数值之和。
7、函数重载
重载是同名的函数传入不同的参数,可以执行不同的功能。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
参数类型不同有三种情况:
1.参数类型不同:
function getInfo(string):void;
function getInfo(number):void;
2.参数数量不同:
function getInfo(n1:number):void;
function getInfo(x:number,y:number):void;
3.参数类型顺序不同:
function getInfo(n1:number,s1:string):void;
function getInfo(s:string,n:number):void;
es5 中出现同名方法,下面的会替换上面的方法
function css(config){
}
function css(config,value){
}
ts中函数传入不同的参数,可以执行不同的功能。看一个实例:
function getInfo(name:string):string;
function getInfo(age:number):number;
function getInfo(str:any):any{
if(typeof str === 'string'){
return '我叫' + str;
}else{
return '我的年龄是'+ str;
}
}
console.log(getInfo('小明')); //正确
console.log(getInfo(20)); //正确
console.log(getInfo(true)); //错误写法,未找到与参数匹配的
当调用字符类型时,可以正确匹配从而得到结果,数值型也是一样,可是当调用布尔型,因为在方法中未匹配参数,所以会报错误。
方法的覆盖与重载的区别
- 方法覆盖要求参数列表保持一致;方法重载的参数列表必须不一致
- 方法覆盖的返回数据类型必须一致;方法重载木得要求
- 方法覆盖只适用于父类和子类之间;方法重载适用于子类和父类内部,或者父类和子类之间
- 方法覆盖在访问权限和异常抛出方面有限定;方法重载木得任何限定
- 方法覆盖针对一个父类方法只能被子类覆盖一次;方法重载针对一个方法可以被多次重载