⚠️ 下述所有❌ 的地方均指编译错误,但实际为可运行状态,javascript为弱类型语言导致(Typescript相当于一个严格性的刻度盘,你可以将指针拔动到你想要的位置。)
定义函数
下面代码中包含了ES5、ES6两种函数定义的方式
// ES5
function fun1 (a: number): string { // a: number 输入参数a为number类型, fun1 (a: number): string函数返回值类型为string类型
return '你好啊'
}
// ES6
let fun2 = (a: number): string => '你好啊';
若非必要,TypeScript通常不需要单独为函数定义返回值类型,因为TypeScript能够根据返回值自动推断出返回值类型
输入参数
必要参数
若非特意,一般函数参数都为必要参数,必要参数都必须一一对应,多或者少都无法通过检查
let fun1 = (a: number, b: string): number => 0;
fun1(2,'你好啊');
fun1(2); // ❌ 应有 2 个参数,但获得 1 个。
fun1(2,'你好啊', 'hello'); // ❌ 应有 2 个参数,但获得 3 个。
可选参数
如果希望参数是可选择输入的,那么可以使用?字符来将参数变为可选参数,注意,可选参数必须被放置在必要参数后面,原因:当必要参数和可选参数全都被输入值时,调用不会出现问题,但当只输入可选参数后的必要参数时,编译器无法判断输入的是可选参数还是必要参数
// 可选参数在必要参数后
let fun1 = (a: number, b?: string): string => '你好啊';
fun1(2, 'hello');
fun1(2);
// 可选参数在必要参数前
let fun1 = (a?: number, b: string): string => '你好啊' // ❌ 已声明“b”,但从未读取其值。必选参数不能位于可选参数后
fun1(2, 'hello');
fun1(2) // ❌ 应有 2 个参数,但获得 1 个。
默认参数
可以为参数提供一个默认值,当用户没有上传这个参数,或者传入的值为undefined时,该参数的值为此默认值。注意⚠️:带默认值的参数并不需要放在参数的最后面,他可以在任何位置,但如果不是放在最后,就必须使用undefined对该参数的位置进行占位处理,若使用了null,则会将null当作输入值处理输出,不会输出默认值
let fun1 = (a = '小明', b: string) => console.log(b,a)
fun1(undefined, '你好'); // 你好小明
fun1(null, '你好'); // ❌ 类型“null”的参数不能赋给类型“string | undefined”的参数, 输出值为:你好null
剩余参数
想操纵参数,但是并不知道有多少个参数会被传进来,可以使用剩余参数,即把所有参数收集到一个变量中加省略号即可。剩余参数:可以一个都没有,也可以有很多个
let fun1 = (a = '小明', ...b: string[]) => {
const c = a + ' ' + b.join(' ');
console.log(c)
}
fun1(undefined, '你好', '我好', '他好', '大家好'); // 小明 你好 我好 他好 大家好
网友评论