1.1. 函数返回值
TypeScript需要指定函数返回值类型。
// 返回一个字符串
function hello():string {
return "Hello World!"
}1.2. 参数类型
参数必须指定类型。如果不指定参数类型报错:error TS7006: Parameter 'x' implicitly has an 'any' type.
//函数返回值为number,参数的数据类型也为number
function add(x: number, y: number): number {
return x + y;
}
let r = add(1,2)
console.log(r)调用add方法必须传两个参数,并且必须为number类型才行。
1.3. 参数默认值
默认参数,可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数,注意如果默认值不是在最后,调用时使用默认值需要传undefined。
function add(x:number=10, y: number): number {
return x + y;
}
let r = add(undefined,2)
console.log(r)//12
r = add(5,2)
console.log(r)//7
function sub(x:number, y: number=10): number {
return x + y;
}
r = sub(20) //10
r= sub(20,5)//151.4. 可选参数
function fullName(firstName: string, lastName?: string) { //此时lastName为可选参数,非必传
if(lastName){
return firstName + " " + lastName;
}else {
return firstName;
}
}
let name1 = fullName("ma");
let name2 = fullName("ma", "wan");ts函数设置可选参数时,只能少传,不能多传,相比之下,js函数的参数可以多传,按顺序取参数。
1.5. 剩余参数
剩余参数可以将一个不确定数量的参数作为一个数组传入,类似于java中的可变参数。注意剩余参数只能用逗号分隔开传入,不能传数组,如果不传值默认为空数组[ ]。
function sum(i:number,...nums:number[]){
console.log(nums);
if(nums.length==0){
return i;
}
return i+nums.reduce((a,b)=>a+b);
}
let total = sum(10,2,3,4);
console.log(total) //191.6. 匿名函数
匿名函数是一个没有函数名的函数,在运行时动态声明,除了没有函数名外,其他的与标准函数一样。可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。
var hello= function() { //不带参数的匿名函数
return "hello world!";
}
console.log(hello())
var add = function(a,b) { //带参数的匿名函数
return a + b;
}
console.log(add(2,3))
匿名函数自调用
(function () {
var str = "Hello World!";
console.log(str)
})()
1.7. 构造函数
TypeScript 也支持使用 JavaScript 内置的构造函数 Function() 来定义函数:
var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)
let myadd = new Function("a","b","return a+b");
console.log(myadd(4,5))//91.8. 箭头函数
( [param1, parma2,…param n] )=>statement;
可以指定参数类型,也可以不指定函数的参数类型,通过函数内来推断参数类型。
var add = (x:number)=> {
x = 10 + x
console.log(x)
}
add(100)类型推断:
var func = (x:any)=> {
if(typeof x=="number") {
console.log(x+" 是一个数字")
} else if(typeof x=="string") {
console.log(x+" 是一个字符串")
}
}
func(10)
func("wanma")无参数:
var sayHello =()=> {
console.log("hello world");
}1.9. 函数重载
重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。
定义函数重载需要定义重载签名和一个实现签名。
重载签名定义函数的形参和返回类型,没有函数体。一个函数可以有多个重载签名对应于调用该函数的不同方式。
实现签名有参数类型和返回类型,还有实现函数的主体,且只能有一个实现签名。
示例1:
// 重载签名
function print(s1:string):void;
function print(n1:number,s1:string):void;
// 实现签名
function print(x: any,y?:any):void {
console.log(x);
console.log(y);
}
print("hello")// hello undefined
print(12,"hello") //12 hello示例2:
// 重载签名
function greet(person: string): string;
function greet(persons: string[]): string[];
// 实现签名
function greet(person: unknown): unknown {
if (typeof person === 'string') {
return `Hello, ${person}!`;
} else if (Array.isArray(person)) {
return person.map(name => `Hello, ${name}!`);
}
throw new Error('Unable to greet');
}
console.log(greet("wanma"))// hello wanma
console.log(greet(["xiaoma","dama"]))//['Hello, xiaoma!', 'Hello, dama!']

0条评论
点击登录参与评论